Bash

如何在 bash 中總結多個 bash 命令的結果?

  • February 20, 2022

所以我有以下

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將一個文件(流)視為輸入並列印總數。

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