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

如何基于awk中的第1列添加第二列?例如,我使用了以下脚本,awk,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

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

awk 'NF == 1 {c=$1; print $0} NF>1 {if (c==$1) {print "\t" $2} else {c=$1; print $0}}'
可以,但请注意,缩进可能不正确,因为我在上面使用了一个简单的选项卡
\t


在awk中使用阵列的HTH解决方案

{
    a[$1]=a[$1]+$2
}
END {
    for (i in a)
        printf("%d\t%d\n", i, a[i])
}
再次通过管道将输出进行排序-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

您可以用
awk'{print$1}'替换管道中的
sed的//^[]\+//g'| cut-d'-f1
。此外,使用sed,如果您使用
^
$
锚定模式,则无需使用
g
,因为该模式在一行中只能出现一次。使用此选项,管道中先前的
排序-k1n
可以删除,因为输出仍然需要再次排序。嘿..非常感谢glenn。Gr8帮助