我有一个看起来像这样的文件:
dee 123
bee 555
dee 56
cee 29
dee 30
cee 13
我需要这样的输出:
dee 123,56,30
bee 555
cee 29,13
如何使用 perl one-liners 执行此任务?
我有一个看起来像这样的文件:
dee 123
bee 555
dee 56
cee 29
dee 30
cee 13
我需要这样的输出:
dee 123,56,30
bee 555
cee 29,13
如何使用 perl one-liners 执行此任务?
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块一样在最后一节中,我们只打印键和值。
这将使您大部分时间到达那里(“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