为什么这不起作用?我已经找了很久,发现了一些非常复杂的解决方案,但我认为这可以简化并重复使用......悲伤:'(
声明
awk -F"\t" '!seen[$3]++'
文件
r1c1 r1c2 r1c3
r2c1 r2c2 r2c3
r3c1 r3c2 r3c3
r4c1 r4c2 r3c3
r5c1 r5c2 r5c3
所需输出
r3c1 r3c2 r3c3
r4c1 r4c2 r3c3
代码添加0和1。
[user@host]$ awk '{a[$3]=a[$3] $0 RS c[$3]++} END {for (i in c) if (c[i]>1) printf "%s",a[i]}' file
r3c1 r3c2 r3c3
0r4c1 r4c2 r3c3
1[jcole@dukescri01 srlg]$
答案 0 :(得分:2)
以下awk
版本也可以帮助您(如果您希望获得与Input_file本身相同的输出顺序)。
awk 'FNR==NR{a[$3]++;next} a[$3]>1' Input_file Input_file
编辑:
awk '{++a[$3];b[$3]=b[$3]?b[$3] ORS $0:$0}END{for(i in a){if(a[i]>1){print b[i]}}}' Input_file
答案 1 :(得分:1)
只需使用 uniq
命令:
uniq -f2 -D file
-f N
- 避免比较第一个N
字段-D
- 打印所有重复的行输出:
r3c1 r3c2 r3c3
r4c1 r4c2 r3c3
如果文件未排序:
sort -k3 file | uniq -f 2 -D
答案 2 :(得分:1)
在awk中,将记录存储为哈希的一遍版本:
$ awk '
{
a[$3]=a[$3] $0 RS # store records
c[$3]++ # counter
}
END {
for(i in c)
if(c[i]>1) # pick the ones with duplicates
printf "%s",a[i]
}' file
r3c1 r3c2 r3c3
r4c1 r4c2 r3c3