ファイルをサブセットに分割して正しい染色体を取得します。

ファイルをサブセットに分割して正しい染色体を取得します。

次の内容を含む入力ファイルがあります。

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

関連情報