αғs*_*нιη 4 command-line awk text-processing
如何使用awk
.
我正在使用awk
:
awk -F, '{sum[$1]+=$2} END{for (x in sum) print x, sum[x]}' inFile
Run Code Online (Sandbox Code Playgroud)
我可以修改上面的命令来打印唯一单词的总出现次数吗?类似于以下示例输入的以下结果:
结果(打印结果的顺序无关紧要):
A 2 25
B 1 12
C 3 18
Run Code Online (Sandbox Code Playgroud)
输入:
A,15
C,13
C,4
A,10
B,12
C,1
Run Code Online (Sandbox Code Playgroud)
我可以添加另一个数组来分别计算它们,但我认为应该有另一种方法来使用相同的数组来打印它。
数组中是否有任何索引sum
来存储看到的总单词数?
不,没有这样的索引。数组值不计算它们增加了多少次。这里最自然的做法是使用第二个数组:
$ awk -F, '{sum[$1]+=$2;seen[$1]++} END{for(x in sum) print x,seen[x],sum[x]}' file
A 2 25
B 1 12
C 3 18
Run Code Online (Sandbox Code Playgroud)
您还可以使用 Kos 的回答中所示的二维数组,但是,正如您所看到的,这并没有以任何方式简化事情。或者,您可以使用一些 perl 魔法:
$ perl -F, -lane 'push @{$k{$F[0]}},${$k{$F[0]}}[-1]+$F[1];
END{print "$_ ",$#{$k{$_}}+1," ${$k{$_}}[-1]" for keys(%k)}' file
C 3 18
B 1 12
A 2 25
Run Code Online (Sandbox Code Playgroud)
不,这不是线噪声,是的,它使用单个阵列来打印所有内容。