我想删除前3列中重复超过3次(或4次)的行。主要目标是删除基因组坐标重复超过3或4次的行。
输入文件.tsv
| chrome |位置|位置2|参考|阿尔特|
| - ------|- ------|- ------|- ------|- ------|
| 染色体21|小行星1046|小行星1046|T型|C级|
| 染色体21|小行星1046|小行星1046|T型|C级|
| 染色体21|小行星1046|小行星1046|A类|G级|
| 染色体21|小行星1046|小行星1046|C级|G级|
| 染色体21|小行星1046|小行星1046|A类|G级|
| 染色体21|小行星1046|小行星1046|T型|C级|
| 染色体21|小行星10465|小行星10465|T型|C级|
n=3时的预期输出
| chrome |位置|位置2|参考|阿尔特|
| - ------|- ------|- ------|- ------|- ------|
| 染色体21|小行星1046|小行星1046|T型|C级|
| 染色体21|小行星1046|小行星1046|T型|C级|
| 染色体21|小行星10465|小行星10465|T型|C级|
我尝试了awk '{if(!seen[$1,$2,$3]++){if(++count[$1,$2,$3]〈=3)print} }'和一些排序和uniq组合,但是它们没有得到我想要的输出。
2条答案
按热度按时间dddzy1tm1#
使用dup计数进行注解可以让我们轻松地解决这个问题。
Python将比awk更方便。
install:
wvt8vs2t2#
一个常见的shell脚本技巧是重新格式化数据,以便使用 *nix实用程序轻松处理数据。通常,麻烦的实用程序是
uniq
命令,其名称为-f
(跳过f字段选项),其中字段在记录的前面跳过。很多时候,您希望可以在记录的末尾跳过,因此我们依赖于awk来重新格式化数据以在末尾具有可跳过字段:产出
可以根据需要更改print语句中的字段分隔符,以满足使用系统的需要。
(And该代码可以被折叠到一行上,给出非常期望的(如果被错误地赋值)“oneliner”(-:)。