给出以下两行:

foo1 foo2 foo3 foo4
foo3 foo4 foo1 foo2

第2行是重复的,因为它的一对列1和2等于行1中的列3和4。

使用awk删除第二行的最短方法是什么?

最佳答案

这似乎可行,但请自行检查:

cat <<EOF >file1
foo1 foo2 foo3 foo4
foo3 foo4 foo1 foo2
foo2 foo1 foo3 foo4
fooA fooB fooC fooD
fooC fooD fooA fooB
fooD fooC fooA fooB
fooD fooB fooC fooA
EOF
awk '!f1[$1$2$3$4]++ && !f1[$3$4$1$2]++' file1
#Output
foo1 foo2 foo3 foo4
foo2 foo1 foo3 foo4
fooA fooB fooC fooD
fooD fooC fooA fooB
fooD fooB fooC fooA


编辑:
正如评论中指出的那样,为避免可能的字段不必要的连接以及避免foob arfoo bar字段之间的混淆,最好使用字段分隔符FS(无论该FS设置了什么值,默认情况下为空格)数组的一部分表示:

awk '!f1[$1FS$2FS$3FS$4]++ && !f1[$3FS$4FS$1FS$2]++' file1

关于awk - 使用awk,删除具有不同索引的重复列对的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44089101/

10-09 15:01