Awk 对于第一列中出现的每个字段,求第二列中所有对应字段的总和
我的输出有两列,我需要一个awk-linux命令来为第一列中出现的每个字段求第二列的所有对应字段的和。然后打印第1列的唯一值及其在第to列中对应的和。尝试在结果上遵循Awk 对于第一列中出现的每个字段,求第二列中所有对应字段的总和,awk,Awk,我的输出有两列,我需要一个awk-linux命令来为第一列中出现的每个字段求第二列的所有对应字段的和。然后打印第1列的唯一值及其在第to列中对应的和。尝试在结果上遵循awk $ bpimagelist -l -d 11/01/2013 03:27:13 -e 11/01/2013 03:30:00 | awk '/^IMAGE/ {print $2, $19}' XXclcnpde148-bak.XX 11808 XXclnXXcXXcde010-bak.XX 26400 XXcwcnpd
awk
$ bpimagelist -l -d 11/01/2013 03:27:13 -e 11/01/2013 03:30:00 | awk '/^IMAGE/ {print $2, $19}'
XXclcnpde148-bak.XX 11808
XXclnXXcXXcde010-bak.XX 26400
XXcwcnpde148-bak.XX 1623072
XXcwcnpde207-bak.XX 672
XXcwcnpde207-bak.XX 672
XXcwcnpde209-bak.XX 672
XXcwcnpde209-bak.XX 672
XXcwcnpde209-bak.XX 672
-
-
-
- and continues
输出:
awk '{a[$1]+=$2} END {for (x in a) print x, a[x]}' file
事实上,您可以在单个awk中完成相同的任务,如下所示
XXclnXXcXXcde010-bak.XX 26400
XXcwcnpde207-bak.XX 1344
XXcwcnpde148-bak.XX 1623072
XXclcnpde148-bak.XX 11808
XXcwcnpde209-bak.XX 2016
编辑(根据OP的评论) 如何获得排序后的输出。使用相应的值对列n 1进行排序 第2栏和还可以使用列的相应值对列n2进行排序 一, 最简单的方法是使用
sort
- 第1列排序
awk'{a[$1]+=$2}END{for(a中的x)print x,a[x]}'文件| sort-k1
是可选的,因为它是默认行为-k1
- 第2列排序
awk'{a[$1]+=$2}END{for(a中的x)print x,a[x]}'文件| sort-n-k2
用于数字排序,因为第二个字段由数字组成-n
bpimagelist ... | awk '/^IMAGE/ {a[$2]+=$19} END {for (x in a) print x, a[x]}'
awk'{sum2[$1]+=$2};结束{for(sum2中的id){print id,sum2[id]}}{input
这里$1是id字段,$2是第2列。我们为求和列2构建了1个数组。处理完所有行/记录后,我们迭代数组键(id字符串),并打印该数组索引处的值。在Gnu Awk版本4中,您可以使用
PROCINFO[“sorted_In”]
对结果进行排序。例如:
awk '{sum2[$1] += $2}; END{ for (id in sum2) { print id, sum2[id] } }' < input
其中a.awk
为:
gawk -f a.awk file
给出输出:
{ a[$1]+=$2 }
END {
print "Sorted on string value of first column:"
print "---------------------------------------"
PROCINFO["sorted_in"] = "@ind_str_asc"
for (i in a) {
print i, a[i]
}
print ""
print "Sorted on numerical value of second column:"
print "-------------------------------------------"
PROCINFO["sorted_in"] = "@val_num_asc"
for (i in a) {
print i, a[i]
}
}
谢谢,下面的命令运行良好,awk'{a[$1]+=$2}END{for(a中的x)print x,a[x]}'文件请告诉我如何获得排序输出。使用列2的相应值对列1进行排序还可以使用第1列的相应值对第2列进行排序。@user3016638请检查我答案中的编辑。谢谢,下面的命令运行良好,awk'{a[$1]+=$2}END{对于(a中的x)打印x,[x]}文件,请告诉我如何获得排序后的输出。使用列2的相应值对列1进行排序还可以使用第1列的相应值对第2列进行排序请注意,
awk'{commands}'文件
已经足够了,您不需要
。
Sorted on string value of first column:
---------------------------------------
XXclcnpde148-bak.XX 11808
XXclnXXcXXcde010-bak.XX 26400
XXcwcnpde148-bak.XX 1623072
XXcwcnpde207-bak.XX 1344
XXcwcnpde209-bak.XX 2016
Sorted on numerical value of second column:
-------------------------------------------
XXcwcnpde207-bak.XX 1344
XXcwcnpde209-bak.XX 2016
XXclcnpde148-bak.XX 11808
XXclnXXcXXcde010-bak.XX 26400
XXcwcnpde148-bak.XX 1623072