次の内容を含む入力ファイルがあります。
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
(最初の列)に含まれていないすべての行が選択されます。_
またはGlenn Jackmanが提案したように
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