我有一个制表符分隔的 .txt 文件,想要删除第一列中重复的行。如果这可以在不排序的情况下完成,那将是令人惊奇的,但我已经接受了我必须使用排序。如果我使用排序,则标题无法排序,它必须保持在顶部。
测试数据集(制表符分隔):
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
STPG1 1 3 1
ABD 0 0 0
ABC 0 0 0
我梦想的输出:
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
ABD 0 0 0
ABC 0 0 0
我的下一个最佳输出:
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
ABC 0 0 0
ABD 0 0 0
NFYA 0 0 1
STPG1 0 1 3
我设法在逗号分隔的测试示例 testc.txt 上使用以下代码,但标头仍在排序中。我似乎无法找到一种分配有效的制表符分隔符的方法?另外,这段代码中的标头也有问题:
sort -u -t, -k1,1 testc.txt
也许我应该澄清一下,我不知道真实数据集中的行数、列数或行名称是什么。
答案1
您可以awk
在这里使用:
$ awk -F'\t' 'NR==1 || !seen[$1]++' ip.txt
Symbol ATCACGACAGACAGGT.1 ATCACGACAGCCTATA.1 TTTGTCATCATGTCTT.1
STPG1 0 1 3
NFYA 0 0 1
ABD 0 0 0
ABC 0 0 0
-F'\t'
指定制表符作为分隔符NR==1
保留标题(尽管对于给定的输入,这不是必需的)- NR 是一个特殊变量,它将具有当前行号!seen[$1]++
在这里,seen
数组将使用第一个字段作为键,如果该值为零(第一次看到键),则条件将变为 true