
如何檢查管道輸入的長度?我想:
echo "A" | xargs sh -c 'echo ${#$1}'
也:
echo "A" | xargs sh -c 'echo ${#\"$1\"}'
基於答案在這裡,對於非管道範例。
答案1
作為@史蒂夫寫道,只是用來wc -c
計算位元組數。請參閱man wc
其他選項。
echo
將換行符附加到輸出末尾,這就是為什麼在計數時您會比預期多獲得一個字元。用於printf
更嚴格地控制輸出。
答案2
假設您想要的是在參數長度小於 2 時執行命令:
seq 100 | parallel echo '{= length($_) >= 2 and skip =}'
它還將並行運行作業——每個核心一個。
注意:GNU Parallel 不是 moreutils 中的並行。
GNU Parallel 是一個通用並行器,可以輕鬆地在同一台電腦或多台您可以透過 ssh 存取的電腦上並行運行作業。
如果您想要在 4 個 CPU 上執行 32 個不同的作業,則並行化的直接方法是在每個 CPU 上執行 8 個作業:
相反,GNU Parallel 在完成後會產生一個新進程 - 保持 CPU 處於活動狀態,從而節省時間:
安裝
出於安全原因,您應該使用軟體套件管理器安裝 GNU Parallel,但如果 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