我有许多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 's/########## 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次读取存档N次标识符/我想要的信息ZINC_NUMBER。因为要提取数千个,所以需要很多时间。
因此,我想找到一种传递标识符数组或列表/ ZINC_NUMBER的方法,以根据数组/列表中的标识符的功能将zcat读数输出到多个不同的文件。
换句话说,我想使用zcat进行单读并提取一组标识符的数据,而不仅仅是一个标识符。
感谢您的帮助!
我认为ripgrep
(https://github.com/BurntSushi/ripgrep)可能是基于https://blog.burntsushi.net/ripgrep/的工作的工具。它具有-z
选项,可在不使用zcat的情况下处理压缩文件(gzip,bzip2,lzma,xz,lz4,brotli,zstd),并且通过分配中间缓冲区,然后从文件中读取固定大小的字节块来工作,然后搜索缓冲区,然后重复该过程。