当第二行中的第一个字段与上一行

时间:2016-09-07 07:58:24

标签: bash awk sed grep

我有一个看起来像这样的文件:

f1 |  f2  | f3
---  ----  ---
T1 | 0.10 | tx1  
T1 | 0.32 | tx2  
T2 | 0.16 | tx1  
T2 | 0.56 | tx3
T2 | 0.90 | tx2  

我想要的是将f1值与前一个值进行比较,如果匹配,则打印整行。此外,如果f1值出现超过2次,则只获得第二个,因此不允许重复。这只是一个例子,该文件包含3次,4次和5次f1,我也希望得到这些。

任何有关此事的想法都值得赞赏,因为我还没有得到一个! 我尝试了这段代码,但没有用:

awk '{ if ($1 != old)  print; old = $1; }' foo

我的预期输出如下:

f1 |  f2  | f3
---  ----  ---  
T1 | 0.32 | tx2   
T2 | 0.56 | tx3

2 个答案:

答案 0 :(得分:5)

像这样:

$ awk 'f1==$1&&hits[$1]==1{print}{f1=$1;hits[$1]++}' foo
T1 | 0.32 | tx2
T2 | 0.56 | tx3

答案 1 :(得分:2)

$ cat ip.txt 
f1 |  f2  | f3
---  ----  ---
T1 | 0.10 | tx1  
T1 | 0.32 | tx2  
T2 | 0.16 | tx1  
T2 | 0.56 | tx3
T2 | 0.90 | tx2  

$ awk 'seen[$1]++ == 1 || NR < 3' ip.txt 
f1 |  f2  | f3
---  ----  ---
T1 | 0.32 | tx2  
T2 | 0.56 | tx3