使用 awk 並行

使用 awk 並行

我有大約 3,000 個文件,每個文件大小為 300MB,我想使用我的 16 核伺服器盡快搜尋它們以查找一系列子字串。

這是我嘗試過的,但它似乎沒有並行搜索文件。

sudo find /mnt2/preprocessed/preprocessed/mo* | sudo xargs awk '/substring/ {c++} END {print c}' | paste -sd+ | bc

它是從不同的操作方法貼在一起的,我不完全理解它。您對如何拆分文件處理有什麼建議嗎?

答案1

  1. parallel查看您的系統上是否有該程式。 (它可能來自 GNU。)如果你這樣做,請弄清楚如何使用它。否則,
  2. 運行您的find輸出到文件。使用文字編輯器,或者可能使用諸如 之類的工具的腳本head,將該文件拆分為 16 個具有(大約)相同行數的片段文件(即,引用相同數量的找到的文件)。然後啟動16條awk … | paste … | bc管道;每個片段檔案一個。 (並添加 16 個結果。)

我想知道為什麼您要使用專門設計的awk字串來計算字串的出現次數。grep -c

答案2

GNU並行與xargs非常相容,在你的情況下它可以取代它。如果您僅將substringuse的出現次數計算grep -c史考特建議:

sudo find /mnt2/preprocessed/preprocessed/mo* | 
  sudo parallel grep -c source | paste -sd+ | bc

請注意,某些版本的 GNU/Linux 以「Tollef 並行」相容模式安裝 GNU 並行。您可以透過將--gnu命令列參數新增至並行來更改它。要使更改永久添加--gnu~/.parallel/config.

相關內容