我有一个看起来像这样的文件:
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
答案 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