我之前问过一个关于保留第一个重复项实例的问题,并且提供的解决方案到目前为止一直运行良好(请参阅保留第一个重复项实例)。
但是,我现在遇到的情况是,C 列和 D 列中的值可能相同,但顺序不同,并且我只想保留一个(任一顺序都可以)。
输入示例:
A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
9 3 C A 9 3 P
4 8 C T 7 4 P
9 3 T G 9 3 P
期望的输出:
A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P
使用:(sort -k3,4 -k5,5r -k1,1r file | sort -k1,1 -k3,4 -u | sort -k1,1r
或类似的)保留9 3 A C 9 3 P
和9 3 C A 9 3 P
版本,但我只想保留其中之一。增加的复杂性是,A 列的值可能有多个可接受的 C 列和 D 列值(例如上面所需输出示例中的第 2 行9 3 A C 9 3 P
和第 5 行9 3 T G 9 3 P
),因此无法仅根据 A 列搜索重复项。
谢谢!
答案1
awk '{
key1 = $1 FS $2 FS $5 FS $5 FS $7
if ( ((key1 SUBSEP $3 FS $4) in seen) || ((key1 SUBSEP $4 FS $3) in seen) )
next
seen[key1, $3 FS $4] = 1
print
}'
A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P