GNU Parallel指南

jopen 10年前發布 | 25K 次閱讀 GNU Parallel

GNU Parallel是一個shell工具,為了在一臺或多臺計算機上并行的執行計算任務。本文簡要介紹GNU Parallel的使用。

GNU Parallel

它是什么?

GNU Parallel是一個shell工具,為了在一臺或多臺計算機上并行的執行計算任務,一個計算任務可以是一條shell命令或者一個以每一行做為輸入的腳本程序。通常的輸入是文件列表、主機列表、用戶列表、URL列表或者表格列表;一個計算任務也可以是一個從管道讀取的一條命令。GNU Parallel會把輸入分塊,然后通過管道并行的執行。

如果你會使用xargs和tee命令,你會發現GNU Parallel非常易于使用,因為GNU Parallel具有與xargs一樣的選項。GNU Parallel可以替代大部分的shell循環,并且用并行的方式更快的完成計算任務。

GNU Parallel保證它的輸出與順序執行計算任務時是一樣的,這樣就可以方便的把GNU Parallel的輸出做為其它程序的輸入。

對于每一行輸入,GNU Parallel會把這一行做為參數來運行指定的命令。如果沒有給出命令,那么這一行會被當做命令執行。多行輸入會并行的運行。GNU Parallel經常被用于替代xargs或者cat | bash。

指南

本教程展示了絕大多數GNU Parallel的功能。旨在介紹GNU Parallel中的一個選項,而非講解真實世界中使用的例子。花一個小時的時間學習本教程,你會因為它喜歡上命令行。

預備

為了執行本教程中的示例,你首先需要做如下準備:

  • parallel >= version 20130814
    安裝最新版:

    (wget -O - pi.dk/3 || curl pi.dk/3/) | bash

    這條命令同時也會安裝最新版的指南

    man parallel_tutorial

    本教程的大部分內容同時也兼容舊版本。

  • abc-file
    生成文件:

    parallel -k echo ::: A B C > abc-file

  • def-file
    生成文件:

    parallel -k echo ::: D E F > def-file

  • abc0-file
    生成文件:

    perl -e 'printf “A\0B\0C\0”' > abc0-file

  • abc_-file
    生成文件:

    perl -e 'printf “A_B_C“' > abc-file

  • tsv_file.tsv

    1 生成文件:

    perl -e 'printf “f1\tf2\nA\tB\nC\tD\n”' > tsv-file.tsv

  • num30000
    生成文件:

    perl -e 'for(1..30000){print “$_\n”}' > num30000

  • num1000000
    生成文件:

    perl -e 'for(1..1000000){print “$_\n”}' > num1000000

  • num_%header
    生成文件:

    (echo %head1; echo %head2; perl -e 'for(1..10){print “$\n”}') > num%header

  • 遠程執行:ssh免密碼登錄$SERVER1和$SERVER2
    生成文件:

    SERVER1=server.example.com
    SERVER2=server2.example.net
    最后應該成功運行如下命令:

    ssh $SERVER1 echo works
    ssh $SERVER2 echo works
    使用'ssh-keygen -t dsa; ssh-copy-id $SERVER1'建立環境(使用empty pass phrase)

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!