在文件中使用perl one liner进行搜索

时间:2012-11-27 21:53:37

标签: perl

我有一个看起来像这样的文件:

dee    123    
bee    555    
dee    56    
cee    29    
dee    30    
cee     13

我需要这样的输出:

dee  123,56,30    
bee  555    
cee   29,13

如何使用perl one-liners执行此任务?

2 个答案:

答案 0 :(得分:2)

perl -alnwe '
    push @{$a{$F[0]}}, $F[1]; 
    }{ 
    for (keys %a) { print $_, "  ", join ",",@{$a{$_}} } ;'

<强>输出:

cee  29,13
dee  123,56,30
bee  555

<强>解释

  • -a空格上的autosplit输入行
  • -l处理换行符
  • -n假设while(<>)循环程序
  • @F数组来自autosplit,$F[0]$F[1]是数组元素。
  • %a是我们存储结果的地方,第一列是键,第二列是数组
  • }{ eskimo运算符与-n开关的作用与END块相同

在上一节中,我们只打印键和值。

答案 1 :(得分:1)

这将使你大部分时间('x'是文件名):

perl -ane 'm/^([^ ]+) +(\d+)/; if ($name{$1} ne "") { $name{$1} .= ","; }; $name{$1} .= $2; END { foreach (sort(keys(%name))) { print $_ . "    " . $name{$_} . "\n"; } }' x

这个单线的输出:

bee    555
cee    29,13
dee    123,56,30