はいどーも皆さんこんにちは、adachitです。
以前、bedtoolsを使って、2つのファイルの共通領域を書き出そうとしたところ、染色体名が異なるためエラーが出力されました。
ファイルによって、接頭に「chr」が付いていたり付いていなかったりとバラバラです。
こういう場合、Linuxのsedコマンドを使用することで染色体の名前を変更することができます。
それでは、サンプルファイルを使用して実際にやってみます。
今回は、2つのサンプルファイル、1_test_sorted.bedと2_test_sorted.bedを用意しました。
それぞれのファイルの中身は以下のようになっています。
$ less 1_test_sorted.bed chr1 5 20 chr1 25 30 chr1 45 50 $ less 2_test_sorted.bed 1 10 15 1 25 30 1 100 200
ご覧のようにこれらの2つのファイルの染色体名は、異なっています。こちらに対して、bedtools intersectを実行すると
$ bedtools intersect -a 1_test_sorted.bed -b 2_test_sorted.bed > output.bed ***** WARNING: File 1_test_sorted.bed has inconsistent naming convention for record: chr1 5 20 ***** WARNING: File 1_test_sorted.bed has inconsistent naming convention for record: chr1 5 20
このようなエラーが出力されます。
ここで、sedコマンドを使用し、b_sample_sorted.bedの接頭に「chr」を付与して、染色体名を揃えます。
$ sed 's/^/chr/' 2_test_sorted.bed > 2_test_sorted_chr.bed $ less 2_test_sorted_chr.bed chr1 10 15 chr1 25 30 chr1 100 200
各行の先頭に「chr」が付与されています。 それでは、このファイルを使ってbedtools intersectをやっていきます。
$ bedtools intersect -a 1_test_sorted.bed -b 2_test_sorted_chr.bed > output.bed $ less output.bed chr1 10 15 chr1 25 30
エラーなくbedtoolsを実行できました!
今回は、sedコマンドで「chr」を付与しましたが、逆に1_test_sorted.bedから「chr」を削除することで染色体名を揃えることができます。
削除する場合のコマンドは以下の通りです。
$ sed 's/^chr//' 1_test_sorted.bed > 1_test_sorted_no_chr.bed $ less 1_test_sorted_no_chr.bed 1 5 20 1 25 30 1 45 50
ぜひ機会があれば、お試しを。