나는 꽤 복잡한 것을 하려고 노력하고 있지만, 가능한 한 간단하게 설명하려고 노력할 것입니다. 내 Linux 컴퓨터에는 서로 다른 이름을 가진 많은 디렉터리가 있지만 모두 동일한 형식(예: 1trg_A -> ????_?
)을 갖고 있으며 각 폴더에는 동일한 방식으로 호출되는 하나 이상의 파일이 있습니다(그들 사이의 참조 코드는 다르며 다음에 연결됩니다). 이름) 폴더: 예를 들어 Pocket_001_1trg_A.pdb_OUTPUT.txt
). 따라서 각 폴더에는 각각 다음과 같은 ????_?
이름의 파일이 하나 이상 있습니다 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%) 값을 추출하려고 합니다.
이는 각 파일에 대해 수행되어야 하며 모든 데이터를 하나의 출력 파일에 저장합니다. 예를 들어, 그 안에 두 개의 서로 다른 디렉터리( 2ert_B
및 6yus_1
)와 두 개의 서로 다른 파일( 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~"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}' {} \;
하지만 결국 입력한 후에는@renaud globstar
와 함께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%)
단지 순서가 다를 뿐이죠.