ビッグデータ分析のために何千ものファイルを繰り返していますか?

ビッグデータ分析のために何千ものファイルを繰り返していますか?

私はbashスクリプトの初心者です。誰でも助けることができますか?

  • ディレクトリ()にファイルリスト() pamlfiles/があります。*.fa
    OG0018053.fa
    OG0018054.fa
    OG0018055.fa
    
  • ファイルは次のようになります。
    head -n 2 ../pamlfiles/*
    ==> ../pamlfiles/OG0018053.fa <==
    >C.rhe
    ATGAGG------------GTCCTCCTGCTTCTCGGATTGGTGGCTTTTGGCCTGGCTGAC
    
    ==> ../pamlfiles/OG0018054.fa <==
    >L.fab
    atg---------------------acggacgagatatctctggcgtgtggcatgtcagga
    
    ==> ../pamlfiles/OG0018055.fa <==
    >A.ven
    ATGAACACTGCCACTCCCACCGAGTTTGACTTCTCTTTCTTGGAAGAGGGCTTCTCCGCC
    
  • 次のスクリプト()を使用して処理しますforloop.sh
    #!/bin/bash
    for file in ../pamlfiles/*.fa
    do
        filename=$(basename -- "$file")
        gene_name="${filename%%.*}"
        cp codeml_0_opt1_templ.ctl codeml_0.ctl
        sed -i -e "s/GENE/$gene_name/g" codeml_0.ctl
        codeml codeml_0.ctl
    done
    

ただし、実行するとforloop.shエラーが発生します。

Sequence file ../pamlfiles/OG0018055 not found!

次のようになりますcodem1_0_opt1_templ.ctl

head codeml_0_opt1_templ.ctl 
seqfile = ../pamlfiles/GENE
outfile = results/GENE_M0.txt
treefile = OG0018055.fa.m.fa.mt.py.nex.treefile
 
noisy = 9
verbose = 0 

runmode = 0
seqtype = 1  
CodonFreq = 2

私はどこで間違っていますか?

答え1

codem1プロセスの出力(それは何でも)を見ると、ファイルが見つからないことがわかりますOG0018055。これはファイルが実際に呼び出されるので論理的です。OG0018055.fa

スクリプトから.faファイル名行の拡張子を削除できます。

gene_name="${filename%%.*}"

遺伝子名を学びましょう。その後、sedファイルテンプレートのすべてのパターン発生を適切な遺伝子名に置き換えることができます。GENEただし、これは更新されたcodeml_0.ctlファイル内の行がseqfile次のようになることを意味します。

seqfile = ../pamlfiles/OG0018055

したがって、.faここに拡張はありません。

したがって、テンプレートファイルを修正して読んでください。

seqfile = ../pamlfiles/GENE.fa

これにより、.faファイル拡張子が失われることはありません。

関連情報