我见过这个单行
perl -lane '$_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{' file
此处:How can I sum values in column based on the value in another column?
我不记得最后的“{”是如何工作的。 有人可以解释它是如何工作的吗?
答案 0 :(得分:16)
来自Perl help:
-n assume "while (<>) { ... }" loop around program
这纯粹是一个文本操作,所以它给出了这个程序:
while (<>) { $_{$F[0]}+=$F[1]}print"$_ $_{$_}"for keys%_;{ }
这是对-n
开关的滥用,因为由于原始程序中的}
不匹配,while循环会提前关闭。但是}
开关添加的结束-n
仍然需要与某些东西匹配,这就是为什么在程序结束时需要额外的{
,即使它什么都不做。
换句话说,最后一个{
的唯一原因是不会出现语法错误。