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