我有许多 GB+ 大小的 gz 档案,由于磁盘空间的原因,我无法解压缩。每个档案都有一个特定的标识号(例如 test365.gz)和如下结构:
1 1 2 1
########## Name: ZINC000077407198
@<TRIPOS>MOLECULE
ZINC000077407198 none
@<TRIPOS>ATOM
1 C1 5.7064 -2.3998 -12.0246 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000099999999
@<TRIPOS>MOLECULE
ZINC000099999999 none
@<TRIPOS>ATOM
1 C1 -2.0084 -5.2055 -12.9609 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077402345
@<TRIPOS>MOLECULE
ZINC000077402345 none
@<TRIPOS>ATOM
1 C1 6.5657 -1.5531 -15.3414 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077407198
@<TRIPOS>MOLECULE
ZINC000077407198 none
@<TRIPOS>ATOM
1 C1 3.6696 -1.8305 -14.6766 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000012345678
@<TRIPOS>MOLECULE
ZINC000012345678 none
@<TRIPOS>ATOM
1 C1 4.5368 -0.8182 -17.4314 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077407100
@<TRIPOS>MOLECULE
ZINC000077407100 none
@<TRIPOS>ATOM
1 C1 1.4756 -2.2562 -14.0852 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077407198
@<TRIPOS>MOLECULE
ZINC000077407198 none
@<TRIPOS>ATOM
1 C1 6.1712 -0.8991 -16.4096 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077407198
@<TRIPOS>MOLECULE
ZINC000077407198 none
@<TRIPOS>ATOM
###### 定义块之间的行数是可变的。
我有一个 ZINC 实体 + 目标档案的标识符列表:
test365/ ZINC000077407198
test227/ ZINC000009100000
test365/ ZINC000077407100
...
目前我做:
zcat test365.gz | sed -n '/########## Name: ZINC000077407100/,/########## Name:/p' > ZINC000077407100.out
我得到:
########## Name: ZINC000077407100
@<TRIPOS>MOLECULE
ZINC000077407100 none
@<TRIPOS>ATOM
1 C1 1.4756 -2.2562 -14.0852 C.3 1 LIG1 -0.1500
@<TRIPOS>BOND
1 1 2 1
########## Name: ZINC000077407198
哪个工作正常。如果 ZINC000077407100 有 N 个块,我会在 zcat 上提取 N 个块,并且不介意以 ##### 开头的行。
问题是我需要为 N 个标识符 / ZINC_NUMBER 读取存档 N 次我想要的信息。由于我有数千个提取物,因此需要很长时间。
所以我想找到一种方法来传递一个数组或标识符列表/ZINC_NUMBER,以根据数组/列表中的标识符将zcat读取输出到几个不同的文件。
换句话说,我想使用 zcat 进行单次读取,并为一组标识符提取数据,而不仅仅是一个。
谢谢你的帮助!