txtファイル操作

txtファイル操作

同じディレクトリで多くの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

おすすめ記事