同じディレクトリで多くの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
)
答え2
ループを実装せずにこれを行うことができます。ワイルドカードを含むファイルをawk
コマンドに渡すだけです。
awk -F':' '{$1 =""; sub(/^[ \t]+/, "");
sub(/[ \t]+$/, "");
sub(/[ \t]+/,",");
printf("%s%s",FNR==1?"":",",$1) >> substr(FILENAME, 0, length(FILENAME)-4)"_2.txt"}' Pocket_*.pdb_OUTPUT.txt
説明する
- まず、コロン(
$1 =""
)の前の要素を削除し、sub(/^[ \t]+/, "")
残りの項目の前()と後のスペース()を削除します。sub(/[ \t]+$/, "")
- 要素間のスペースは
sub(/[ \t]+/,",")
コンマ()で置き換えられます。 - 最後に変更された入力を使用して要素を正しいファイルに出力し、要素が特定のファイルの最初の行では
FILENAME
ない場合は、要素間にカンマを追加します。