zcat *.gz | awk '{print $1}' |sort| uniq -c | sed 's/^[ ]\+//g' | cut -d' ' -f1 | sort | uniq -c | sort -k1n
我得到以下输出:
3 648
3 655
3 671
3 673
3 683
3 717
4 18
4 29
4 31
4 34
4 652
5 12
6 24
6 33
7 13
12 10
13 9
14 8
33 7
73 6
166 5
383 4
1178 3
3945 2
26692 1
我不希望在第一栏中重复。示例:如果我的第一列是3,我应该添加第二列中与3相关联的所有值。谢谢
答案 0 :(得分:2)
在awk中使用数组的解决方案
{
a[$1]=a[$1]+$2
}
END {
for (i in a)
printf("%d\t%d\n", i, a[i])
}
再次通过sort -n
输出输出以使其按升序排列
$ awk -f num.awk numbers | sort -n
3 4047
4 764
5 12
6 57
7 13
12 10
13 9
14 8
33 7
73 6
166 5
383 4
1178 3
3945 2
26692 1
答案 1 :(得分:0)
awk 'NF == 1 {c=$1; print $0} NF>1 {if (c==$1) {print "\t" $2} else {c=$1; print $0}}'
可以做到,但请注意,缩进可能不正确,因为我上面使用了一个简单的标签\t
。
HTH