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
-gl
1crt_A.pdb
Pocket_001_1crt_A.pdb
Pocket_002_1crt_a.pdb
-i
ALL
1crt.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の情報を同じ行に報告しようとしています。ファイルは次のようになります。AAAAA
BBBBB
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_3
9yhj_B
XXXX_X.pdb
Pocket_nnn_XXXX_X.pdb
例: -home/Desktop/Work/2ert_A
と存在する2ert_A.pdb
場合Pocket_001_2ert_A.pdb
- 、 、 とhome/Desktop/Work/7rtf_3
存在する場合7rtf_3.pdb
Pocket_001_7rtf_3.pdb
Pocket_002_7rtf_3.pdb
Pocket_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_X
Pocket_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
私の目標は、各ファイルの情報に関連するすべての行を含むテキストファイル()を作成することです。AAAAAAA
Pocket_nnn_xxxx_X_OUTPUT.txt
たとえば、ディレクトリが2つしかない場合は、2ert_A
次7rtf_3
のように動作します。
- あり
home/Desktop/Work/2ert_A
2ert_A.pdb
Pocket_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.pdb
Pocket_001_7rtf_3.pdb
Pocket_002_7rtf_3.pdb
Pocket_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
ファイルに必要なフィールドを抽出します。cd
ed 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
コマンドは、単一のファイルを処理する場合にのみ適しています。 (ここではこれを使用します。)一度にすべての出力ファイルを処理するには、スクリプトを変更する必要があります。