Bash
如何在 bash 中總結多個 bash 命令的結果?
所以我有以下
cat a1 | wc -l // term1 cat a2 | wc -l // term2 cat a3 | wc -l // term3 ... cat a10 | wc -l // term10
而且我想
term1 + term2 + ... + term10
在一個班輪中計算(如果它很長也沒關係)。理想情況下我想得到$(cat a1 | wc -l) + ... $(cat a10 | wc -l)
更簡單的方法:
awk 'END { print NR }' a1 a2 a3 ...
或者
wc -l a1 a2 a3 ... | awk 'END { print $1 } '
而且,如果您有很多文件,請確保不要達到命令行長度限制:
find . -type f -name 'a[123]' -exec awk 'END { print NR }' {} + | { while read n; do tot=$(( tot + n )) done echo "$tot" }
如果您需要堅持這種格式(例如,因為您有一些複雜的命令代替
cat
範例中的 s),您可以使用算術擴展:echo $(( $(wc -l <a1) + $(wc -l <a2) + $(wc -l <a3) + ... ))
或者
bc
,對於更廣泛的計算選項:echo "ibase=10; obase=10; $(wc -l <a1) + $(wc -l <a2) + ..." | bc
人們這樣說
cat a1 | wc -l
是UUOC(無用的 Cat),因為你可以只寫
wc -l a1
但是對於您的問題,您可以將其用作 cat 的有用用途:
cat a1 a2 a3 ... | wc -l
這種方式
wc
將一個文件(流)視為輸入並列印總數。