2

我有一个制表符分隔的文件,我想删除仅在前三列中相同的行(保留一份)。我更喜欢使用 unix 来执行此操作,例如 awk 或 uniq。

输入文件:

Supercontig_1.1 241783  286397  5677    52
Supercontig_1.1 241783  286397  5678    53
Supercontig_1.1 241783  286397  5679    53
Supercontig_1.2 10500  25700  3000    57
Supercontig_1.2 10500  25700  3001    59
Supercontig_1.2 10500  25700  3002    59
Supercontig_1.3 2000  7000  5686    60
Supercontig_1.3 2000  7000  5687    60

输出:

 Supercontig_1.1 241783  286397  5677    52
 Supercontig_1.2 10500  25700  3000    57
 Supercontig_1.3 2000  7000  5686    60
4

2 回答 2

5

一种使用方式awk

awk '!array[$1,$2,$3]++' file.txt

结果:

Supercontig_1.1 241783 286397 5677 52
Supercontig_1.2 10500 25700 3000 57
Supercontig_1.3 2000 7000 5686 60
于 2012-10-18T09:07:21.100 回答
2

这个 oneliner 可以解决问题:

awk '!a[$1$2$3]++' file

测试

kent$  echo "Supercontig_1.1 241783  286397  5677    52
dquote> Supercontig_1.1 241783  286397  5678    53
dquote> Supercontig_1.1 241783  286397  5679    53
dquote> Supercontig_1.2 10500  25700  3000    57
dquote> Supercontig_1.2 10500  25700  3001    59
dquote> Supercontig_1.2 10500  25700  3002    59
dquote> Supercontig_1.3 2000  7000  5686    60
dquote> Supercontig_1.3 2000  7000  5687    60
dquote> "|awk '!a[$1$2$3]++'
Supercontig_1.1 241783  286397  5677    52
Supercontig_1.2 10500  25700  3000    57
Supercontig_1.3 2000  7000  5686    60
于 2012-10-18T09:07:39.127 回答