同じディレクトリで多くのtxtファイルを操作する必要があります。各ファイルは同じ形式名(Pocket_????????.pdb_OUTPUT.txt) と同じ内部構造です。
以下は例です(ファイル名:Pocket_001_1b47_A.pdb_OUTPUT.txt)。
Input PDB-File: /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1b47_A/1b47_biounit1_1b47_A.pdb
Pocket File: /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1b47_A/Pocket_001_1b47_A.pdb
Pocket Surface: 649.1
Hydrophobic Surface: 0.0 ( 0.0%)
Polar Surface: 441.0 (67.9%)
Acceptor Surface: 309.9 (47.7%)
Donnor Surface: 399.9 (61.6%)
Exposed To Solvent: 186.8 (28.8%)
Pocket Volume: 1255.9
Hydrophobic Volume: 0.0 ( 0.0%)
Hydrophilic Volume: 229.1 (18.2%)
Flexible Volume: 134.2 (10.7%)
Rigid Volume: 120.2 ( 9.6%)
Buried Volume(B): 48.5 ( 3.9%)
Buried Volume(A): 0.0 ( 0.0%)
出力を取得する必要があります(Pocket_????????.pdb_OUTPUT_2.txt)ソースファイルの名前と各行の値を、ソースファイルに報告された順序でカンマで区切って報告します。
はい。出力(Pocket_001_1b47_A.pdb_OUTPUT_2.txt):
Pocket_001_1b47_A.pdb_OUTPUT.txt,649.1,0.0,(0.0%),441.0,(67.9%),309.9,(47.7%),399.9,(61.6%),186.8,(28.8%),1255.9,0.0,( 0.0%),229.1,(18.2%),134.2,(10.7%),120.2,( 9.6%),120.2,( 9.6%),0.0,( 0.0%)
各ファイルを処理し、各ファイルの相対出力ファイルを取得するにはループが必要だと思います。
誰でも私を助けることができますか?ありがとうございます! ! !
ベストアンサー1
努力する、
for f in Pocket_??????????.pdb_OUTPUT.txt; do
output=$(
awk -F: 'NR>2{gsub("[[:blank:]]","",$2);print $2;}' "$f" \
| sed 's/(/\n(/' \
| paste -sd,
)
printf '%s,%s\n' "$f" "$output" > "${f%.*}_2.txt"
done
説明する:
- ループファイルの使用
for f in ...; do ... done
ループ内でチェーンは...
awk -F: 'NR>2{gsub("[[:blank:]]", "", $2); print $2;}'
最初の2行を削除し、すべてのスペースとタブを削除します$2
。sed
新しい行を追加(
paste -sd,
前の内容をcsvにする
それから
"$f"
次のコマンドを使用してファイル名と一緒に入れます。printf
- 書き込み
"${f%.*}_2.txt"
(削除.txt
および追加_2.txt
)