非常に複雑なサイクルです。誰でも私を助けることができますか?

非常に複雑なサイクルです。誰でも私を助けることができますか?

2つの入力ファイルを随時変更しながら、コマンドを複数回実行する必要があります。おそらく「for」のようなループを実行する必要があるようですが、どうすればよいかわかりません。コマンドは次のとおりです。

"....." -ps -i xxxx_X.pdb -gl Pocket_nnn_xxxx_X.pdb -o output.txt 

2つの入力ファイルはオプション-iとオプションの後のファイルであり、オプションの入力ファイルがそのオプションのNファイル(1と10のいずれか)に対応するという-gl点で互いに関連しています。相関関係は次のとおりです。名前で。たとえば、最初のファイルは次のようになります。 2番目のファイル...同時に他のファイルがある可能性があります。各ファイルのコマンドを繰り返すことに加えて、問題はすべてのファイルが同じディレクトリにあるが、各ファイルが入力ファイル名であるサブディレクトリにあることです。たとえば、上記の2つの入力ファイルを含む複数のファイルを含むサブディレクトリがあるというディレクトリがあります。また、各コマンドは次の出力ファイルを生成します。-i-gl1crt_A.pdbPocket_001_1crt_A.pdbPocket_002_1crt_a.pdb-iALL1crt.A

Input PDB-File:         1crt_A.pdb
Pocket File:            Pocket_001_1crt_A.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     92.0    (22.7%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5

生成された各ファイル出力(行2、列2())を抽出し、Pocket_001_1crt_A.pdbそれを新しいテキストファイル()にコピーし、SUMMARY_ALL.txt行8()および9()の列2と3の情報を同じ行に報告しようとしています。ファイルは次のようになります。AAAAABBBBB

                        AAAAAA   AAAAA(%)   BBBBBB
Pocket_001_1crt_A.pdb   92.0     (22.7%)     536.6 

生成されたすべての出力ファイルに対して最後の操作を実行し、関心のある部分を同じファイルにコピーする必要があります(SUMMARY_ALL.txt)。

はい

以下は一般的なファイルです。

デフォルトディレクトリ:home/Desktop/Workこのディレクトリの下には多くのディレクトリがあり、これらworkのディレクトリの名前は次のとおりですXXXX_X(たとえば2ert_A、、、....)。各ディレクトリには、という名前のファイルと.という名前のファイルが1つ以上あります。7rtf_39yhj_BXXXX_X.pdbPocket_nnn_XXXX_X.pdb

例: -home/Desktop/Work/2ert_Aと存在する2ert_A.pdb場合Pocket_001_2ert_A.pdb - 、 、 とhome/Desktop/Work/7rtf_3存在する場合7rtf_3.pdbPocket_001_7rtf_3.pdbPocket_002_7rtf_3.pdbPocket_003_7rtf_3.pdb

すべてのディレクトリは同じです。XXXX_X

XXXX_X必要なディレクトリごとに次を使用します。

'....' -ps -i xxxx_X.pdb -gl Pocket_nnn_xxxx_X.pdb -o Pocket_nnn_xxxx_X_OUTPUT.txt 

ここで file 入力 -i( XXXX_X.pdb) は常に同じで file -gl( ) は変更されます ( というディレクトリにファイルがさらにある場合にのみ該当し、Pocket_nnn_XXXX_X.pdbそうでなければコマンドラインは一度だけ適用されます)。XXXX_XPocket_nnn_XXXX_X.pdb

コマンドラインが適用されるたびに、各ファイルに対して次のようにPocket_nnn_XXXX_X.pdbファイル出力()が生成されます。Pocket_nnn_xxxx_X_OUTPUT.txt

Input PDB-File:         XXXX_X.pdb
Pocket File:            Pocket_nnn_XXXX_X.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     92.0    (22.7%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5

SUMMARY_ALL.txt私の目標は、各ファイルの情報に関連するすべての行を含むテキストファイル()を作成することです。AAAAAAAPocket_nnn_xxxx_X_OUTPUT.txt

たとえば、ディレクトリが2つしかない場合は、2ert_A7rtf_3のように動作します。

  • ありhome/Desktop/Work/2ert_A2ert_A.pdbPocket_001_2ert_A.pdb

コマンドライン:

'....' -ps -i 2ert_A.pdb -gl Pocket_001_2ert_A.pdb -o Pocket_001_2ert_A_OUTPUT.txt 

文書Pocket_001_2ert_A_OUTPUT.txt:

Input PDB-File:         2ert_A.pdb
Pocket File:            Pocket_001_2ert_A.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     92.0    (22.7%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5
  • 、 、home/Desktop/Work/7rtf_3があります。7rtf_3.pdbPocket_001_7rtf_3.pdbPocket_002_7rtf_3.pdbPocket_003_7rtf_3.pdb

コマンドライン:

'....' -ps -i 7rtf_3.pdb -gl Pocket_001_7rtf_3.pdb -o Pocket_001_7rtf_3_OUTPUT.txt

文書Pocket_001_2ert_A_OUTPUT.txt:

Input PDB-File:         7rtf_3.pdb
Pocket File:            Pocket_001_7rtf_3.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     80.0   (10.7%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5 

別のコマンドライン:

'....' -ps -i 7rtf_3.pdb -gl Pocket_002_7rtf_3.pdb -o Pocket_002_7rtf_3_OUTPUT.txt

文書Pocket_002_2ert_A_OUTPUT.txt:

Input PDB-File:         7rtf_3.pdb
Pocket File:            Pocket_002_7rtf_3.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     50.0    (1.5%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5 

コマンドラインの最後の行:

'....' -ps -i 7rtf_3.pdb -gl Pocket_003_7rtf_3.pdb -o Pocket_003_7rtf_3_OUTPUT.txt

文書Pocket_003_2ert_A_OUTPUT.txt:

Input PDB-File:         7rtf_3.pdb
Pocket File:            Pocket_003_7rtf_3.pdb
eeeeee:                 405.0  
wwwwwwwwwwwww:          71.7    (17.7%)
rrrrrrrrrrrrr:          221.9   (54.8%)
tttttttttttttttt:       206.7   (51.0%)
yyyyyyyyyyyyyy:         84.4    (20.8%)
AAAAAAAAAAAAAAAAAA:     65.0    (75.7%)
BBBBBBBBBBBBB:          536.6  
cgdfeehhhhh:            458
tyrudioh:               78
serfgg:                 2        15
eeeeeeeeeeee:           5        5 

最終ファイルはALL_SUMMAY.txt次のようにする必要があります。

Pocket_001_2ert_A.pdb     92.0    (22.7%)
Pocket_001_7rtf_3.pdb     80.0   (10.7%)
Pocket_002_7rtf_3.pdb     50.0    (1.5%)
Pocket_003_7rtf_3.pdb     65.0    (75.7%)

Pocket_nnn_XXXX_X_OUTPUT.txt作業ディレクトリ()にすべての内容を保存する必要がありますXXXX_X。ファイルはALL_SUMMARY.txtこのディレクトリに保存できますhome/Desktop/Work/

答え1

あなたの仕様を理解していれば - 不一致についてあまり明確ではありませんが - 正確です。 2つのループが必要です

a) デフォルトの .pdb ファイルを探し、

b) 関連するポケットファイル。

ファイルを作成して以前のバージョンを上書きした後、を使用してoutput.txt結果awkファイルに必要なフィールドを抽出します。cded int dirの後にALL試してください。

for FN1 in *.pdb                                                                # loop across all .pdb files
  do    PN="${FN1##*/}"
        PN="${PN%.pdb}"                                                         # construct subdir name
        for FN2 in "${PN/_/.}"/*.pdb                                            # 2nd loop across .pdb files in subdir
          do    "....." -ps -i "$FN1" -gl "$FN2" -o output.txt                  # create output.txt in parent dir
                awk -F: 'FNR == 2  ||                                           # extract desired fields
                         /^AAAAA/  ||
                         /^BBBBB/       {sub (/^ */, "", $2)
                                         printf "%20s%s", $2, /^BBBB/?"\n":""
                                        }
                        ' output.txt >> SUMMARY_ALL.txt                         # and append to result file
          done
  done

結果ファイルの外観の変更(印刷ヘッダー、行形式など)は読者に委ねられます。

答え2

この問題を解決するためのアイデアは

  • cdデフォルトディレクトリへhome/Desktop/Work
  • すべてのディレクトリを循環します????_?(ループ変数dir)。
    • 一致するファイルがある場合$dir.pdb
      • cdディレクトリ入力$dir
      • すべて繰り返すPocket_*_$dir.pdb
        • コマンドを実行してデータを処理し、対応する出力ファイルを生成します。
        • 出力ファイルからstdoutにデータを正常に抽出した場合
      • cd親ディレクトリに戻る必要がある場合
  • このループの出力(つまり、抽出されたすべてのデータ)ALL_SUMMARY.txt
cd home/Desktop/Work
# edit: remove old summary file because now the script will append to it
rm SUMMARY_ALL.txt
for dir in ????_?
do
    if [ -f "$dir/$dir.pdb" ]
    then
        cd "$dir"
        for pocket in Pocket_*_"$dir.pdb"
        do
            out="${pocket%.pdb}_OUTPUT.txt"
            # edit: if the command '....' prints output this will end up in the summary file
            # '....' -ps -i "$dir.pdb" -gl "$pocket" -o "$out" && awk '/Pocket File:/ {pocket=$NF} /AAAAAAAAAAAAAAAAAA:/ {aaa1=$(NF-1);aaa2=$NF} /BBBBBBBBBBBBB:/ {bbb=$NF} END {print pocket,aaa1,aaa2,bbb}' "$out"
            '....' -ps -i "$dir.pdb" -gl "$pocket" -o "$out" && awk '/Pocket File:/ {pocket=$NF} /AAAAAAAAAAAAAAAAAA:/ {aaa1=$(NF-1);aaa2=$NF} /BBBBBBBBBBBBB:/ {bbb=$NF} END {print pocket,aaa1,aaa2,bbb}' "$out" >> ../SUMMARY_ALL.txt
        done
        cd ..
    fi
# edit: avoid putting other output into summanry file
# done > SUMMARY_ALL.txt
done

メモ:

このコードはテストされていません。

&&出力ファイルを生成するコマンドは、このコマンドとawkデータを抽出するコマンドの間で使用するために、成功時にステータス0、エラー時に!=0で終了すると仮定します。

このawkコマンドは、単一のファイルを処理する場合にのみ適しています。 (ここではこれを使用します。)一度にすべての出力ファイルを処理するには、スクリプトを変更する必要があります。

関連情報