如何基于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帮助