如何在awk中添加基于第1列的第二列?例如,我使用以下脚本

时间:2011-06-24 20:44:23

标签: awk

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相关联的所有值。谢谢

2 个答案:

答案 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