我有一个看起来像这样的文件:
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