2016-11-14 5 views
-1

Fastaファイルで検索してパターンを変更するファイルを作成します。大文字と小文字の区別がないためにsedにオプションを追加し、FASTAファイルの文字列を置き換えます。

tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed 's/<$gcenter>/$genbank/g' | " >>script.sh; done 

私のファイルを見て、このような:

#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869 

このような.SHファイルを見て:

それが一致し、変更する必要があり、以下のすべてのパターンで.SHスクリプトを作成されたコマンド

sed 's/scaffold40/JH739887/g' | sed 's/scaffold112/JH739888/g' | sed 's/scaffold41/JH739889/g' | ...

しかし、パターンを大文字と小文字を区別しないようにしたいと思います。 sed 's/<$gcenter>/$genbank/g' | "コマンドに-eを追加します。しかし、フラグを追加すると、スクリプトには印刷されません。なぜどんなアイデア?

tail -n +2 scaffold_names_2.txt | while read assemb gcenter refseq genbank ncbi; do echo -ne "sed -e 's/<$gcenter>/$genbank/g' | " >>script.sh; done 

私のスクリプトを持った後、私は最後のパイプを削除し、私はパターンを検索し、変更したいFASTAファイルを置きます。

最終的な目標は、下の文字列に表示されているScaffold###JH######に置き換えることです。

>Scaffold410 275 
TGCATTAATATGAGTGTGTGCTGCAAAAGTTCAGGTCATGGTCCGATCATACTTCACATTTTGGTAGCACTTTAAGCAGAGATCGGTTATCCCATTCTGTGGAAGACTCAACACTATCATAAGGTCCCACAGTTTTATTATCCCTCTGCCTCCCGGAATGCCCCCGGCAGTGAGGGGTACCATCTTCTCAGCAGTAAGGATATTCTTCAGGAGTTCCGTGTGAGCTTTCCCGGATTTAGTTCCATTTTTTAAATACTTCCCAATTCTTTGCTTTG 
>Scaffold430 374 
CTTTGTTAACTGAAAGAGCCTCTAAGTAGATGACCAGTGCTCAGTTAGTACAGTATGAATTTTGTTTAATGGAACAGGAAGATTTAGTATTGAGAAGCGGTTAAGGGTTTAACCCAGCCTCCTGTCTGAATGGACCTGAAGAGGGGGGCCGGGAAGAAACCCATGACTGCATTAAAGTGATAGATCTCCAGACATGGGCTAGGGAAGATTTACAAGACACTCCCTGGCCTGAGGGAGAAAATATGTTTATTGATGAGTCTTCAAGGGTGGCAGAAGGGAAGCGATTTACAGGATACACAATCATTAATGGAAGGAAATTAAAGGAAGGGGGGAGATTGTCACCCACCTGGTCAGTTCAGACAGCAGAGCTGTAT 

私はこれを行うためにbashコマンドを使用しています。しかし、-eフラグの交換後でさえ、それは機能しません。

+0

あなたの予想される出力は何ですか?私のUbuntuシステムでうまくいくようです。 –

+0

ファイルが追加されたからだと思います。 'sed -e 's//JH739887/g' | sed -e 's//JH739888/g' | sed -e 's//JH739889/g' | ' –

+1

ああ、あなたはあなたの呼び出しを変更した後、最初のscript.shを削除しませんでしたか? –

答えて

1

私は遅刻していることは知っていますが、これは別の人にも役立つかもしれません。

OPの質問を解決するために、彼はこのようなscript.shを作成することがあります。

sed -e 's/scaffold40/JH739887/gi' -e 's/scaffold112/JH739888/gi' -e 's/scaffold41/JH739889/gi' ... 
  • -eは同じsedコマンドでさまざまなスクリプトを含めることができます。
  • s/<searchText>/<replaceText>/gi検索とグローバルgを交換し、iは、私はあなたが本当にやろうとしていることで、カラム「ゲノムセンター名」を交換だと思い、前記ケース

を無視データファイルの"GenBank Accession.version"

そのような場合、それはこのawkのコマンドで可能です:

awk '{ if(NR>1)$2=$4; print }' scaffold_names_2.txt > scaffold_names_2.new.txt 

説明

  • awkは(テキストファイル内の行上で動作プログラミング言語(構文などのC)であります毎回1行)。
  • NR現在のレコード番号
  • $i現在行($1:第1フィールド、$2、第2、など)の内部フィールドが含ま含ま
  • print印刷現在の行。

実行

$ cat scaffold_names_2.txt 
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 scaffold40 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 scaffold112 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 scaffold41 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 scaffold130 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 scaffold54 NW_005054301 JH739891 GPS_002009869 

$ awk '{ if(NR>1) $2=$4; print}' scaffold_names_2.txt > scaffold_names_2.new.txt 

$ cat scaffold_names_2.new.txt 
#Assembly Genome Center name RefSeq Accession.version GenBank Accession.version NCBI name 
GeoFor_1.0 JH739887 NW_005054297 JH739887 GPS_002009865 
GeoFor_1.0 JH739888 NW_005054298 JH739888 GPS_002009866 
GeoFor_1.0 JH739889 NW_005054299 JH739889 GPS_002009867 
GeoFor_1.0 JH739890 NW_005054300 JH739890 GPS_002009868 
GeoFor_1.0 JH739891 NW_005054301 JH739891 GPS_002009869 
関連する問題