我输入的性质如下
1234jjj hdhyvb 1234jjj
6789mmm mddyss skjhude
khora77 koemm sado666
nn1004 nn1004 457fffy
如果列中有重复项,我想删除一行,例如在第一行和最后一行有重复项,因此在输出中删除
6789mmm mddyss skjhude
khora77 koemm sado666
我试过
awk '$1!=$2 || $1!=$3 { print $0 }'
但它无效
答案 0 :(得分:4)
这个awk one-liner做到了:
awk '{delete a;for(i=1;i<=NF;i++)a[$i]}length(a)==NF' file
以您的示例作为输入,输出:
6789mmm mddyss skjhude
khora77 koemm sado666
它构建一个哈希表(awk数组),key是连续的每个字段。最后我们比较哈希表的大小,如果它与字段数相同,我们知道没有重复项,然后将其打印出来。
如果您的文件有100列,那么它也可以正常工作,您无需进行$1==$2 || .....$1==$100
检查。
答案 1 :(得分:1)
在您的特定示例中,您可以执行以下简单操作:
awk ' $1 != $2 && $1 != $3 && $2 != $3 ' input.txt
输出:
6789mmm mddyss skjhude
khora77 koemm sado666
答案 2 :(得分:0)
通过每个领域并增加计数器。如果记录中存在匹配,则跳至next
记录。否则print
:
$ awk '{ delete a; for(i=1;i<=NF;i++) if(++a[$i]>1) next; print }' foo
6789mmm mddyss skjhude
khora77 koemm sado666
编辑:显然与@ Kent的解决方案完全相同,但我的效率可能更高一些。 :d
EDIT2:......显然他在评论中提到加速......