私はかなり複雑なことをしようとしていますが、できるだけ簡単に説明しようとします。私の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_B
)6yus_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ファイルがないとします。
答え2
私はこれfind
に到達することはできませんでしたawk
find . -type f -name "Pocket*.pdb" -exec awk -F: '$1~"Solvent"{last = split(FILENAME, bits, "/"); print bits[last],$2}' {} \;
Pocket_003_6yus_1.pdb 45.3 (22.4%)
Pocket_001_2ert_B.pdb 125.4 (49.9%)
牙
パターンに一致するすべてのファイルで.
find
次のコードを使用します。-type f
-name
"Pocket*.pdb"
-exec
find . -type f -name "Pocket*.pdb" -exec
awk
-F
:
興味のあるテキストが見つかるまで、フィールド区切り文字を使用して各ファイルを1行ずつ繰り返します。$1~"Solvent"
awk -F: '$1~"Solvent"{
一致するものが見つかると、分割されたビット数が保存さsplit
れ、ファイル名(in)と必要なデータが保存され、処理は不要になります。個別に見つかった各ファイルに対して個別にこれを行います。FILENAME
bits[]
/
last
print
bits[last]
$2
exit
awk
{}
\;
last = split(FILENAME, bits, "/"); print bits[last],$2; exit 1}' {} \;
しかし、最終的に入力した後@renaudglobstar
と一緒にawk
awk -F: '$1~"Solvent"{last = split(FILENAME, bits, "/"); print bits[last],$2; exit 1}' **/Pocket*.pdb
Pocket_001_2ert_B.pdb 125.4 (49.9%)
Pocket_003_6yus_1.pdb 45.3 (22.4%)
ただ順序が違うだけです。