Xargs

xargs、記錄和標準輸入

  • October 24, 2014

我有一個 0 字節分隔的記錄文件。

Record 1, Line 1
Record 1, Line 2
[zero byte]
Record 2, Line 1
Record 2, Line 2

我想為每條記錄執行一次“process.sh”命令,記錄作為標準輸入:

bash process-one-record-stdin.sh <record-contents

我可以使用 xargs、parallel 或其他工具來執行此操作嗎?(我知道如何使用 bash 腳本,但我更喜歡盡可能使用內置工具)

動機:

magic-xargs-type-command-here -0 all-records.txt -- xargs -d"\n" -- bash process-one-record-arguments.sh

如果你有 GNU Parallel,你可以這樣做:

parallel --rrs --recend '\0' -N1 --pipe bash process-one-record-stdin.sh <record-contents

所有新電腦都有多個核心,但大多數程序本質上是串列的,因此不會使用多個核心。但是,許多任務是非常可並行化的:

  • 在多個文件上執行相同的程序
  • 對文件中的每一行執行相同的程序
  • 為文件中的每個塊執行相同的程序

GNU Parallel 是一個通用的並行器,可以輕鬆地在同一台機器上或在您可以通過 ssh 訪問的多台機器上並行執行作業。

如果您想在 4 個 CPU 上執行 32 個不同的作業,那麼並行化的直接方法是在每個 CPU 上執行 8 個作業:

簡單的調度

GNU Parallel 會在完成後生成一個新程序 - 保持 CPU 處於活動狀態,從而節省時間:

GNU 並行調度

安裝

如果沒有為您的發行版打包 GNU Parallel,您可以進行個人安裝,這不需要 root 訪問權限。這樣做可以在 10 秒內完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

有關其他安裝選項,請參閱http://git.savannah.gnu.org/cgit/parallel.git/tree/README

學到更多

查看更多範例:http ://www.gnu.org/software/parallel/man.html

觀看介紹影片:https ://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

瀏覽教程:http ://www.gnu.org/software/parallel/parallel_tutorial.html

註冊電子郵件列表以獲得支持:https ://lists.gnu.org/mailman/listinfo/parallel

引用自:https://unix.stackexchange.com/questions/163744