行名の一部をサンプル名に置き換える

行名の一部をサンプル名に置き換える

p1_500sc.fasta、p2_500sc.fastaという名前のサンプルがいくつかあります。各ファイルは次のようになります。

>NODE_60_length_504_cov_1.580902
TATATCGCCGTAGATAGACGAATACGGGATTTTGAAATGACTGATATATTCAAGCACATC
CTGTTCAGTCCAAAATGACATCGGCTTCGATTTCGGGATTGCCCCCGCAAAGTTGTTACA
>NODE_61_length_503_cov_4.457447
GATATGGGCCGGTGAGCATGCTGTCACATTTTGGGCAGGTGCCGAGGATTATGAGCTCGT
CTTCCGGCGTCAACGCTTGTTCGTTGCGTCTGGTGATGTGTTCCAGAGCGGCATAGTCGT
>NODE_62_length_500_cov_4.037534
CTCGTTCTTGCACTCCTGAATGAAGCGAATCTCTGACGAGGGTATTCCATAATCCTCTAT
CAGCTTACGCTTGATTTCTG
>NODE_63_length_500_cov_1.718499
GGAGGATATCAATGCCCTTATACTGCTTCTCAACAGTAGGAGTAATGCGGATACCCAAAA
CGGTCTTAGGGTTCTCCAGCAACTTCATGGCATTCCAACGCTTCAAGTCATCCATGCGGA
AGCCTTCGGCT

ご覧のとおり、NODEフレーズがあります。各ファイルのサンプル名でファイル指定子の "NODE"を変更したいと思います。p1/p2/p100...pn

p1_500sc.fastaファイルの出力は次のとおりです。

>p1_60_length_504_cov_1.580902
TATATCGCCGTAGATAGACGAATACGGGATTTTGAAATGACTGATATATTCAAGCACATC
CTGTTCAGTCCAAAATGACATCGGCTTCGATTTCGGGATTGCCCCCGCAAAGTTGTTACA
>p1_61_length_503_cov_4.457447
GATATGGGCCGGTGAGCATGCTGTCACATTTTGGGCAGGTGCCGAGGATTATGAGCTCGT
CTTCCGGCGTCAACGCTTGTTCGTTGCGTCTGGTGATGTGTTCCAGAGCGGCATAGTCGT
>p1_62_length_500_cov_4.037534
CTCGTTCTTGCACTCCTGAATGAAGCGAATCTCTGACGAGGGTATTCCATAATCCTCTAT
CAGCTTACGCTTGATTTCTG
>p1_63_length_500_cov_1.718499
GGAGGATATCAATGCCCTTATACTGCTTCTCAACAGTAGGAGTAATGCGGATACCCAAAA
CGGTCTTAGGGTTCTCCAGCAACTTCATGGCATTCCAACGCTTCAAGTCATCCATGCGGA
AGCCTTCGGCT

p123_500sc.fasta ファイルの場合

>p123_2_length_456_cov_4.453333
GATATGGGCCGGTGAGCATGCTGTCACATTTTGGGCAGGTGCCGAGGATTATGAGCTCGT
CTTCCGGCGTCAACGCTTGTTCGTTGCGTCTGGTGATGTGTTCCAGAGCGGCATAGTCGT
>p123_356_length_3_cov_4.037908
CTCGTTCTTGCACTCCTGAATGAAGCGAATCTCTGACGAGGGTATTCCATAATCCTCTAT
CAGCTTACGCTTGATTTCTG

他のサンプルでも同様です。サンプルはp1から始まり、p150に達することができます。

ベストアンサー1

bash+sed解決策:

for f in p[0-9]*.fasta; do
    pfx="${f%%_*}"
    sed -i "s/^>NODE/>$pfx/" "$f"
done

  • pfx="${f%%_*}"_– 結果を変数に割り当てるまで、ファイル名の右側の部分を切り捨てます。pfx
  • sed -i "s/^>NODE/>$pfx/"- 部分>NODE文字列を変数に置き換える$pfx

おすすめ記事