$ 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
我的输出有2列,我需要一个awk linux命令来汇总第一列中每个字段出现的第二列的所有相应字段。然后打印第1列的唯一值及其在列中的相应总和。
答案 0 :(得分:2)
对于第2列的总和,第1列为id:
awk '{sum2[$1] += $2}; END{ for (id in sum2) { print id, sum2[id] } }' < input
这里$ 1是id字段,$ 2是列2.我们构建1个数组用于求和列2.一旦我们处理了所有行/记录,我们遍历数组键(id字符串),并打印该数组索引的值。
答案 1 :(得分:1)
在结果上尝试关注awk
awk '{a[$1]+=$2} END {for (x in a) print x, a[x]}' file
输出:
XXclnXXcXXcde010-bak.XX 26400
XXcwcnpde207-bak.XX 1344
XXcwcnpde148-bak.XX 1623072
XXclcnpde148-bak.XX 11808
XXcwcnpde209-bak.XX 2016
实际上你可以在单个awk中执行相同的任务,如下所示
bpimagelist ... | awk '/^IMAGE/ {a[$2]+=$19} END {for (x in a) print x, a[x]}'
编辑 (根据OP的评论)
如何获取已排序的输出。使用相应的值对columnn 1进行排序 第2栏。&amp;还可以使用相应的列值对columnn 2进行排序 1
最简单的方法是使用sort
第1列排序
awk '{a[$1]+=$2} END {for (x in a) print x, a[x]}' file | sort -k1
-k1
是可选的,因为它是默认行为
第2列排序
awk '{a[$1]+=$2} END {for (x in a) print x, a[x]}' file | sort -n -k2
-n
用于数字排序,因为第二个字段由数字
答案 2 :(得分:0)
在Gnu Awk第4版中,您可以使用PROCINFO["sorted_in"]
对结果进行排序。例如:
gawk -f a.awk file
其中a.awk
是:
{ 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]
}
}
给出输出:
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