我有一个输入文件,其中一些内容如下
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