我有多个看起来像这样的文件:(格式:<string>,<number>
)。
例如:
a,5
b,2
c,3
我想对所有这些进行排序和求和,以便最终输出为
<string>,<sum of all numbers>
例如两个文件:
第一个文件:
a,5
b,2
c,3
第二档:
a,1
b,2
输出:
a,6
b,4
c,3
首先我会使用cat *
而不是sort
。但接下来应该用什么?
答案 0 :(得分:1)
使用awk:
$ awk 'BEGIN{FS=OFS=","}{a[$1]+=$2}END{for(i in a)print i,a[i]}' file1 file2
a,6
b,4
c,3
输出顺序是awk随机的。例如,sort
可以根据需要对其进行排序。
编辑:到commant:
$ awk 'BEGIN{FS=OFS=","}{if(($1 in a)==0||a[$1]<$2)a[$1]=$2}END{for(i in a)print i,a[i]}' file1 file2
a,5
b,2
c,3
答案 1 :(得分:1)
Awk是一个功能强大的命令,请查看一些教程here。您需要的一些具体示例,以及您理解awk
假设您的文件名为file.txt
a,5
b,2
c,3
您可以使用以下内容:
awk -F, '{print $2}' file.txt
通过这个,您将获得第二列&#34;由符号&#39;,&#39;分隔。来自档案:file.txt
。
要对列进行求和,您可以使用以下内容:
awk -F, '{ total += $2; } END {print total}' file.txt
也就是说,使用临时变量来累积第二列中的每个值。
最后,您可以使用以下内容:
awk 'BEGIN{FS=OFS=","}{a[$1]+=$2}END{for(i in a)print i,a[i]}' file1 file2 ... fileN
您使用名为built-in
awk
的{{1}}变量来声明分隔符,该变量代表OFS
,然后您可以执行循环添加第二列。< / p>
Output Field Separator Variable
:Note
不需要sort
,因为总和由key
完成。并且还要考虑... fileN
表示您将发送到脚本的N个文件。