1. 程式人生 > >在Linux命令中使用多個CPU核心

在Linux命令中使用多個CPU核心

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的呼叫,生成子運算
然後通過第二個管道傳給awk,把它們加起來。

SED

       想要使用sed在一個極大的檔案中做大量替換麼?那麼就不應該這樣使用:

sed s^old^new^g bigfile.txt

      而是
cat bigfile.txt | parallel --pipe sed s^old^new^g

      ... ... 然後可以使用pipe把輸出儲存到指定的檔案中。