在Linux命令中使用多個CPU核心
阿新 • • 發佈:2019-02-03
cat bigfile.bin | bzip2 --best > compressedfile.bz2
而改為cat bigfile.bin | parallel --pipe --recend '' -k bzip2 --best > compressedfile.bz2
特別對於bzip2命令,GNU Parallel在多核CPU上顯著地快於單核。你一不留神,它就執行完成了。GREP
如果你有一個超大的文字檔案需要被檢索,那麼就不應該這樣使用:
grep pattern bigfile.txt
而是
cat bigfile.txt | parallel --pipe grep 'pattern'
抑或是
cat bigfile.txt | parallel --block 10M --pipe grep 'pattern'
第二條命令使用了--block 10M引數,通過這個引數可以表示你希望每個CPU核心處理多少行資料。
AWK
這裡有一個如何使用awk來計算一個非常大的檔案的例子,原來我們使用:
cat rands20M.txt | awk '{s+=$1} END {print s}'
而現在:
cat rands20M.txt | parallel --pipe awk \'{s+=\$1} END {print s}\' | awk '{s+=$1} END {print s}'
這裡面用到了更多的東西。在parallel中的-pipe引數將cat的輸出分成多個塊傳遞給awk,形成許多子操作計算,這些子計算結果通過第二個管道傳給同一個的awk,然後給出最終結果。第一個awk有三個反斜線,這是為了GNU Parallel呼叫awk的需要。
WC
想要使用超級並行來計算一個檔案的行數嗎?那麼就不要再這樣使用了:
wc -l bigfile.txt
而是:
cat bigfile.txt | parallel --pipe wc -l | awk '{s+=$1} END {print s}'
這是一種相當巧妙的方法:我們先映射出大量的wc -l的呼叫,生成子運算
SED
想要使用sed在一個極大的檔案中做大量替換麼?那麼就不應該這樣使用:
sed s^old^new^g bigfile.txt
而是
cat bigfile.txt | parallel --pipe sed s^old^new^g
... ... 然後可以使用pipe把輸出儲存到指定的檔案中。