对文件进行子集化以获得正确的染色体

对文件进行子集化以获得正确的染色体

我有一个输入文件,其中一些内容如下

chr1    12227   12612
chr1_ett    12721   13220
chr1    14829   14969
chr2    15038   15795
chr2_tdr    15947   16606
chr1    16765   16857
chr1    17055   17232
chr1    17368   17605
chr3    17742   17914
chr3_urr    18061   18267

我想删除"_"第一列中有(下划线)的那些行。因此,基本上只保留 chr1、chr2、chr3,而不保留 chr1_ chr2_ chr3_ 等 染色体从 chr1 到 chr22,并具有 chrX、chrY 和 chrM。

我该怎么做。

谢谢

答案1

尝试

awk '$1 !~ /_/' input_file.txt > output.txt

这将选择$1(第一列)不包含的所有行_

或者,根据格伦·杰克曼的建议

awk '! index($1,"_") ' input_file.txt > output.txt

另一种方式可能是

sed -i -e '/^chr[0-9]*_/d' file.txt

这将删除同一行。 (前提是该行完全以 开头chr

答案2

sed '/_/d' file

将删除所有出现下划线的行队伍中的任何地方

如果需要将结果保存回文件,使用sed -i ...


限制为第一列:

sed '/^[[:blank:]]*[^[:blank:]]\+_/d' file

即:在行的开头,可以选择前导空格,后跟非空格字符和下划线。

答案3

Perl解决方案:

perl -ane 'print unless $F[0] =~ /_/' < input > output

答案4

或者与grep

grep -v "_" file

-v, --invert-match反转匹配的意义,以选择不匹配的行。

如果第一列中只有“_”则删除行:

grep -v "^chr[0-9]_" file

相关内容