特定のデータを別のディレクトリの複数のファイルに抽出する

特定のデータを別のディレクトリの複数のファイルに抽出する

私はかなり複雑なことをしようとしていますが、できるだけ簡単に説明しようとします。私のLinuxコンピュータには異なる名前を持つ多くのディレクトリがありますが、すべて同じ形式(たとえば)を持ち、1trg_A -> ????_?各フォルダには同じ方法で呼び出される1つ以上のファイルがあります(それらの間の参照コードは異なり、次にリンクされます)。名前)フォルダ:例えばPocket_001_1trg_A.pdb_OUTPUT.txt)。したがって、各フォルダには、それぞれ次の????_?名前のファイルが1つ以上ありますPocket_***_????_?.pdb_OUTPUT.txt

input PDB-File:         /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1trg_A/1b47_A.pdb
Pocket File:            /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/1trg_A/Pocket_001_1trg_A.pdb
Pocket Surface:         460.7  
Hydrophobic Surface:    54.6    (11.8%)
Polar Surface:          291.4   (63.2%)
Acceptor Surface:       226.7   (49.2%)
Donnor Surface:         163.7   (35.5%)
Exposed To Solvent:     133.3   (28.9%)
Pocket Volume:          1044.6 
Hydrophobic Volume:     11.0    ( 1.1%)
Hydrophilic Volume:     199.1   (19.1%)
Flexible Volume:        203.3   (19.5%)
Rigid Volume:           51.9    ( 5.0%)
Buried Volume(B):       32.5    ( 3.1%)
Buried Volume(A):       0.0     ( 0.0%)

各ディレクトリに対して、各ファイルからポケット名(例:)Pocket_001_1trg_A.pdbと「溶媒にさらされる」(Pocket_001_1trg_A.pdb 133.3 28.9%)の値を抽出しようとしています。

これは各ファイルに対して実行する必要があり、すべてのデータを1つの出力ファイルに保存します。たとえば、2つの異なるディレクトリ(および2ert_B6yus_1と2つの異なるファイル(Pocket_001_2ert_B.pdb_OUTPUT.txtと)があるとしますPocket_003_6yus_1.pdb_OUTPUT.txt

Pocket_001_2ert_B.pdb_OUTPUT.txt:

input PDB-File:         /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/2ert_B/2ert_B.pdb
Pocket File:            /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/2ert_B/Pocket_001_2ert_B.pdb
Pocket Surface:         460.7  
Hydrophobic Surface:    54.6    (11.8%)
Polar Surface:          291.4   (63.2%)
Acceptor Surface:       226.7   (49.2%)
Donnor Surface:         163.7   (35.5%)
Exposed To Solvent:     125.4   (49.9%)
Pocket Volume:          1044.6 
Hydrophobic Volume:     11.0    ( 1.1%)
Hydrophilic Volume:     199.1   (19.1%)
Flexible Volume:        203.3   (19.5%)
Rigid Volume:           51.9    ( 5.0%)
Buried Volume(B):       32.5    ( 3.1%)
Buried Volume(A):       0.0     ( 0.0%)

Pocket_003_6yus_1.pdb_OUTPUT.txt:

input PDB-File:         /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/6yus_1/26yus_1.pdb
Pocket File:            /home/tommaso/Desktop/E3-ligase/CHAINS-approach/chains/6yus_1/Pocket_003_6yus_1.pdb
Pocket Surface:         460.7  
Hydrophobic Surface:    54.6    (11.8%)
Polar Surface:          291.4   (63.2%)
Acceptor Surface:       226.7   (49.2%)
Donnor Surface:         163.7   (35.5%)
Exposed To Solvent:     45.3   (22.4%)
Pocket Volume:          1044.6 
Hydrophobic Volume:     11.0    ( 1.1%)
Hydrophilic Volume:     199.1   (19.1%)
Flexible Volume:        203.3   (19.5%)
Rigid Volume:           51.9    ( 5.0%)
Buried Volume(B):       32.5    ( 3.1%)
Buried Volume(A):       0.0     ( 0.0%)

"output.txt"ファイルは次のとおりです。

Pocket_001_2ert_B.pdb 125.4   49.9%
Pocket_003_6yus_1.pdb 45.3   22.4%

私は何をすべきかわからず、それが明確で、私よりも経験豊富な誰かが私を助けることができることを願っています。ありがとうございます。

ベストアンサー1

gnu grep、sed、および3つのディレクトリを使用してbashで作業しているとします。

$ ls
1trg_A  2ert_B  6yus_1

Bashでglobstar機能を使用できます(**)

$ ls **/Pocket_*.pdb_OUTPUT.txt
1trg_A/Pocket_001_1trg_A.pdb_OUTPUT.txt  2ert_B/Pocket_001_2ert_B.pdb_OUTPUT.txt  6yus_1/Pocket_003_6yus_1.pdb_OUTPUT.txt

grepを使って目的の行を見つけるだけです。

$ grep -e '^Exposed To Solvent:' **/Pocket_*.pdb_OUTPUT.txt
1trg_A/Pocket_001_1trg_A.pdb_OUTPUT.txt:Exposed To Solvent:     133.3   (28.9%)
2ert_B/Pocket_001_2ert_B.pdb_OUTPUT.txt:Exposed To Solvent:     125.4   (49.9%)
6yus_1/Pocket_003_6yus_1.pdb_OUTPUT.txt:Exposed To Solvent:     45.3   (22.4%)

次に、sedを使用して抽出された行を変更する必要があります。完全なコマンドは次のとおりです。

$ grep -e '^Exposed To Solvent:' **/Pocket_*.pdb_OUTPUT.txt | sed -e 's/^.*\(Pocket.*\.pdb\).*:/\1/;s/[()]//g' >myfile
$ cat myfile
Pocket_001_1trg_A.pdb     133.3   28.9%
Pocket_001_2ert_B.pdb     125.4   49.9%
Pocket_003_6yus_1.pdb     45.3   22.4%

注:2ert_BフォルダにPocket_001_1trg_A.pdb_OUTPUT.txtファイルがないとします。

おすすめ記事