我有一个看起来像这样的文件:
dee 123
bee 555
dee 56
cee 29
dee 30
cee 13
我需要这样的输出:
dee 123,56,30
bee 555
cee 29,13
如何使用perl one-liners执行此任务?
答案 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