具有ID数组的单个zcat多个提取物

问题描述 投票:0回答:1

我有许多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进行单读并提取一组标识符的数据,而不仅仅是一个标识符。

感谢您的帮助!

python bash zcat
1个回答
0
投票

我认为ripgrephttps://github.com/BurntSushi/ripgrep)可能是基于https://blog.burntsushi.net/ripgrep/的工作的工具。它具有-z选项,可在不使用zcat的情况下处理压缩文件(gzip,bzip2,lzma,xz,lz4,brotli,zstd),并且通过分配中间缓冲区,然后从文件中读取固定大小的字节块来工作,然后搜索缓冲区,然后重复该过程。

© www.soinside.com 2019 - 2024. All rights reserved.