我对这个脚本有疑问:
#!/bin/bash
for filename in /home/hb/pg/ensemble/pdbs/P24941/raw_pdb/*.pdb; do
grep COMPND $filename | grep "CHAIN:" -B 1 | sed 's/COMPND//g' | sed 's/CHAIN\://g' | sed 's+[0-9]++g' | sed 's/--//g' | sed 's\MOLECULE:\\g' | sed 's/;/,/g' | sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' | awk 'NF' | sed 'N;s/\n/ /' > trimmed.csv
mv trimmed.csv /home/hb/pg/ensemble/pdbs/P24941/raw_pdb/trimmed
done
我有大约 800 个这样的 pdb 文件:
> ls -lXGHh --group-directories-first
total 234M
drwxr-xr-x 1 xx 18K Jun 9 18:13 overall_chains
drwxr-xr-x 1 xx 22 Jun 9 22:13 trimmed
-rw-r--r-- 1 xx 9 May 15 09:43 README.md
-rw-r--r-- 1 xx 224K May 9 10:20 1AQ1.pdb
-rw-r--r-- 1 xx 244K May 9 10:21 1B38.pdb
-rw-r--r-- 1 xx 238K May 9 10:21 1B39.pdb
-rw-r--r-- 1 xx 272K Jun 9 07:19 1BUH.pdb
-rw-r--r-- 1 xx 224K May 9 10:21 1CKP.pdb
-rw-r--r-- 1 xx 222K May 9 10:21 1DI8.pdb
-rw-r--r-- 1 xx 222K May 9 10:21 1DM2.pdb
-rw-r--r-- 1 xx 239K May 9 10:21 1E1V.pdb
...
这是一个示例文件,包含前 20 行:
HEADER CELL CYCLE 16-OCT-00 1E9H
TITLE THR 160 PHOSPHORYLATED CDK2 - HUMAN CYCLIN A3 COMPLEX WITH
TITLE 2 THE INHIBITOR INDIRUBIN-5-SULPHONATE BOUND
COMPND MOL_ID: 1;
COMPND 2 MOLECULE: CELL DIVISION PROTEIN KINASE 2;
COMPND 3 CHAIN: A, C;
COMPND 4 SYNONYM: CYCLIN-DEPENDENT KINASE 2, CDK2;
COMPND 5 EC: 2.7.1.37;
COMPND 6 ENGINEERED: YES;
COMPND 7 OTHER_DETAILS: PHOSPHORYLATED ON THR 160 CHAINS A AND C
COMPND 8 ARE ASYMETRIC UNIT COPIES;
COMPND 9 MOL_ID: 2;
COMPND 10 MOLECULE: CYCLIN A3;
COMPND 11 CHAIN: B, D;
COMPND 12 SYNONYM: A3;
COMPND 13 ENGINEERED: YES;
COMPND 14 OTHER_DETAILS: TRUNCATED FRAGMENT OF CYCLIN A. IN COMPLEX
COMPND 15 WITH CDK2 CHAINS B AND D ARE ASYMETRIC UNIT COPIES
SOURCE MOL_ID: 1;
SOURCE 2 ORGANISM_SCIENTIFIC: HOMO SAPIENS;
我想运行简单的脚本来读取每个“.PDB”文件和收集并更新单个 csv 文件及其输出。
我可以实现单个文件的输出:
grep COMPND 1E9H.pdb | grep "CHAIN:" -B 1 | sed 's/COMPND//g' | sed 's/CHAIN\://g' | sed 's+[0-9]++g' | sed 's/--//g' | sed 's\MOLECULE:\\g' | sed 's/;/,/g' | sed 'N;s/\(.*\)\n\(.*\)/\2\n\1/' | awk 'NF' | sed 'N;s/\n/ /'
该单个文件的输出为:
A, C, CELL DIVISION PROTEIN KINASE ,
CYCLIN A, B, D,
我想修剪目录中的所有 pdb 文件,然后将它们移动到特定目录(修剪后的目录)。有什么解决方案吗?
谢谢大家的回答。
我尝试编写 bash 脚本,但我只得到了一行 csv 文件。
答案1
(首先,一个问题:为什么要有命令mv
而不是直接写入所需的路径?)
有两种基本方法可以实现此目的:附加到输出文件而不是覆盖它,>>
而是使用>
:
for i in *.pdb; do
echo processing "$i" >> for-loop-output.txt
done
您还可以将输出重定向放在其他地方:
for i in *.pdb; do
echo processing "$i"
done > for-loop-output.txt
后者可能效率更高,因为输出文件仅打开一次。但是,对于只有 800 个文件的情况,这并不重要。