-6

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

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

我需要这样的输出:

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

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

4

2 回答 2

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空格上的自动拆分输入行
  • -l处理换行符
  • -n假设while(<>)循环程序
  • @F数组来自自动拆分,$F[0]$F[1]数组元素。
  • %a是我们存储结果的地方,第一列作为键,第二列作为数组
  • }{爱斯基摩操作员,用-n开关做的和END块一样

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

于 2012-11-27T22:43:59.940 回答
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
于 2012-11-27T22:22:23.980 回答