当三列相同时删除行

时间:2012-10-18 09:02:33

标签: unix awk uniq

我有一个制表符分隔文件,我想删除仅在前三列中相同的行(保留一个副本)。我更喜欢使用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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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