讀取管道值的長度?

讀取管道值的長度?

如何檢查管道輸入的長度?我想:

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 平行調度

安裝

出於安全原因,您應該使用軟體套件管理器安裝 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

相關內容