我正在处理大数据集,我需要为每个唯一ID($ 1)提供并打印数字顺序,并希望为每个唯一ID删除335数字顺序以上的行。
数据看起来像
101 24
101 13
101 15
102 25
102 21
102 23
103 20
103 12
103 18
输出看起来像这样
101 24 1
101 13 2
101 15 3
102 25 1
102 21 2
102 23 3
103 20 1
103 12 2
103 18 3
答案 0 :(得分:4)
尝试以下
输入
$ cat f
101 24
101 13
101 15
102 25
102 21
102 23
103 20
103 12
103 18
输出
$ awk '{print $0,++a[$1]}' f
101 24 1
101 13 2
101 15 3
102 25 1
102 21 2
102 23 3
103 20 1
103 12 2
103 18 3
如果数据已排序(第1列),则使用下面一个,更快
$ awk '$1!=p{n=0}{print $0,++n; p=$1}' f
101 24 1
101 13 2
101 15 3
102 25 1
102 21 2
102 23 3
103 20 1
103 12 2
103 18 3
删除335以上的ID
$ awk '$1!=p{n=0; p=$1}++n<335{print $0,n}' f
$ awk '++a[$1]<335{print $0,a[$1]}' f