
我有大約 3,000 個文件,每個文件大小為 300MB,我想使用我的 16 核伺服器盡快搜尋它們以查找一系列子字串。
這是我嘗試過的,但它似乎沒有並行搜索文件。
sudo find /mnt2/preprocessed/preprocessed/mo* | sudo xargs awk '/substring/ {c++} END {print c}' | paste -sd+ | bc
它是從不同的操作方法貼在一起的,我不完全理解它。您對如何拆分文件處理有什麼建議嗎?
答案1
parallel
查看您的系統上是否有該程式。 (它可能來自 GNU。)如果你這樣做,請弄清楚如何使用它。否則,- 運行您的
find
輸出到文件。使用文字編輯器,或者可能使用諸如 之類的工具的腳本head
,將該文件拆分為 16 個具有(大約)相同行數的片段文件(即,引用相同數量的找到的文件)。然後啟動16條awk … | paste … | bc
管道;每個片段檔案一個。 (並添加 16 個結果。)
我想知道為什麼您要使用專門設計的awk
字串來計算字串的出現次數。grep -c
答案2
GNU並行與xargs非常相容,在你的情況下它可以取代它。如果您僅將substring
use的出現次數計算grep -c
為史考特建議:
sudo find /mnt2/preprocessed/preprocessed/mo* |
sudo parallel grep -c source | paste -sd+ | bc
請注意,某些版本的 GNU/Linux 以「Tollef 並行」相容模式安裝 GNU 並行。您可以透過將--gnu
命令列參數新增至並行來更改它。要使更改永久添加--gnu
到~/.parallel/config
.