第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

帶有 ID 數(shù)組的單個(gè) zcat 多個(gè)提取

帶有 ID 數(shù)組的單個(gè) zcat 多個(gè)提取

慕斯709654 2022-12-06 14:59:33
我有很多 GB+ 大小的 gz 檔案,由于磁盤空間原因我無(wú)法解壓。每個(gè)存檔都有一個(gè)特定的標(biāo)識(shí)號(hào)(例如 test365.gz)和如下結(jié)構(gòu):         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哪個(gè)工作正常。如果 ZINC000077407100 有 N 個(gè)塊,我會(huì)在 zcat 上提取 N 個(gè)塊,并且不介意以 ##### 開頭的行。問(wèn)題是我需要為我想要的信息的 N 個(gè)標(biāo)識(shí)符/ZINC_NUMBER 讀取存檔 N 次。這需要很多時(shí)間,因?yàn)槲矣袛?shù)千個(gè)要提取。所以我想找到一種方法來(lái)傳遞一個(gè)數(shù)組或標(biāo)識(shí)符列表/ZINC_NUMBER,以根據(jù)數(shù)組/列表中的標(biāo)識(shí)符將 zcat 讀數(shù)輸出到幾個(gè)不同的文件。換句話說(shuō),我想使用 zcat 進(jìn)行單次讀取并提取一組標(biāo)識(shí)符的數(shù)據(jù),而不僅僅是一個(gè)。
查看完整描述

2 回答

?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個(gè)贊

每個(gè) OP 的要求是處理大量數(shù)據(jù)(數(shù)百萬(wàn)行,數(shù) GB 數(shù)據(jù),以及需要檢索大約 100 個(gè)項(xiàng)目的數(shù)據(jù))。從技術(shù)上講,可以使用現(xiàn)代 bash,但這不太可能表現(xiàn)良好。一個(gè)更好的腳本引擎會(huì)在這里做得更好。


此處介紹了可能的 bash/awk 解決方案。它將掃描每個(gè)引用的文件一次,并一次性提取所有選定的標(biāo)簽。請(qǐng)注意,“標(biāo)簽”列表將被掃描多次,但暗示它的大小是合理的


#! /bin/bash -uex

TAGS=data.txt


file_list=$(awk '{ print $1 }' < $TAGS | sort -u)


for f in $file_list ;

do

        gz_name=${f%/}.gz

        zcat $gz_name | awk -v F=$f '

        # Remember tags to retrieve

!DATA && $1 == F { tags[$2] = 1 }

        # OUT set to current output file, empty if item not selected

DATA && $1 == "##########" && $2 == "Name:" {

        OUT = tags[$3] ? $3 ".out" : "" ;

}

OUT { print >OUT }

' $TAGS DATA=1 -

done

不用說(shuō),可以使用 Python、Perl、Javascript 或您最喜歡的文本處理工具編寫上述 5 行 awk 作業(yè)。使用示例數(shù)據(jù)集進(jìn)行測(cè)試。


查看完整回答
反對(duì) 回復(fù) 2022-12-06
?
胡子哥哥

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超6個(gè)贊

似乎每個(gè)以 開頭的條目##########總是有 6 行。在這種情況下,使用grep -A7而不是使用sed -n /##.../,/##.../p. 我想您只打印了后續(xù)標(biāo)題,因?yàn)檫@樣更容易(至少在使用時(shí)sed)。因此,我排除了此答案中的后續(xù)標(biāo)頭(grep -A6而不是grep -A7)。


grep可以給出要搜索的模式列表。這是通過(guò)-f選項(xiàng)完成的。模式列表可以從您的文件中生成。首先按存檔名稱(例如test365)分組,然后打印該存檔的所有模式。在這里我們習(xí)慣awk這樣做??兆止?jié)分隔每個(gè)存檔的模式部分。


為了防止誤報(bào)(并可能加快搜索速度),我們只搜索完整的行而不是子字符串。為了加快速度,我們?cè)O(shè)置了LC_ALL=C. 您可能還會(huì)發(fā)現(xiàn)它zgrep比zcat | grep.


以下腳本最多解壓縮每個(gè)存檔一次。


awk -v prefix='##########                 Name:     ' '

  {a[$1]=a[$1] "\n" prefix $2}

  END {for (k in a) print k a[k] "\0"}

' /path/to/your/list.txt |

while IFS=$'\n' read -r -d '' archive patterns; do

  LC_ALL=C zgrep -A6 -Fxf <(printf %s "$patterns") "${archive/\//.gz}"

  # TODO do something with the output for this archive

done

在上面的腳本中,我test365/從您的列表test365.gz自動(dòng)轉(zhuǎn)換為。我不知道你的目錄結(jié)構(gòu)。如果您需要不同的東西,請(qǐng)修改zgrep. $archive遍歷您的(分組)列表的第一列(即,每個(gè)存檔僅列出一次)。


從您的示例代碼來(lái)看,您似乎想要為每個(gè)模式生成一個(gè)單獨(dú)的文件。為此,將循環(huán)體從上方替換為


zgrep ... > /tmp/zincfound

while IFS= read -r pattern; do

    grep -A6 -Fx "$pattern" /tmp/zincfound > "${pattern##* }.out" 

done <<< "$patterns"

rm /tmp/zincfound


查看完整回答
反對(duì) 回復(fù) 2022-12-06
  • 2 回答
  • 0 關(guān)注
  • 121 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)