例如,我有这个染色体文件:
Chr1 0 145 Region1
Chr1 450 500 Region2
Chr1 499 549 Region2
...
我想删除第三行,因为Region2出现在第2行。我非常感谢任何建议。谢谢!
答案 0 :(得分:0)
假设您有一个制表符分隔符,这应该可以使用awk:
awk -F'\t' '!x[$4]++' file.txt
如果不是标签,只需更改' \ t'无论分隔符是什么,因为默认情况下awk假定为空格。
以下是显示结果的示例:
输入:
~$ cat file.txt
Chr1 0 145 Region1
Chr1 450 500 Region2
Chr1 499 549 Region2
AWK:
awk -F'\t' '!x[$4]++' file.txt
Chr1 0 145 Region1
Chr1 450 500 Region2
这可以通过在将元素添加到之前未遇到的数组时进行打印。这是一个非常标准的重复数据删除单线程,只是为了关注特定领域而不是整条线路。
它的工作原理是将第4个字段添加到关联数组并将其递增,因此它在第一次添加时返回0,并随着数组中每个后续重复项而递增。加入!为了扭转这种逻辑,如果后增量为0,我们将打印,而不是其他任何内容,即每次后续重复添加时都会打印。
例如,在文件中添加更多行:
~$ cat file.txt
Chr1 0 145 Region1
Chr1 450 500 Region2
Chr1 499 549 Region2
Chr1 499 555 Region2
Chr1 499 555 Region3
Chr1 499 556 Region3
然后更改我们的打印以显示我们正在测试的输出:
~$ awk -F'\t' '{print x[$4]++}' file.txt
0
0
1
2
0
1
这里发生的事情应该更加明显。