如何根据唯一ID为每行提供数字顺序

时间:2017-01-02 11:27:01

标签: awk

我正在处理大数据集,我需要为每个唯一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          

1 个答案:

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