だから私は
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)
答え1
答え2
より簡単な方法:
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
答え3
wc
自分でまとめてみてください。すべてのファイルを同時に渡すことができ、wcは合計を計算します。
wc -l a* | tail -n1
「すべて」の単語印刷をスキップしますwc
。
wc -l a* | sed '$!d;s/^ *\([0-9]*\) *[a-zA-Z]*/\1/'
オプションgrep
の機能を使用して-h
(たとえばGNU grep
)ファイル名を省略して行数を計算し、c
それ.*
をxargs
andにパイプしますpython
。
grep -ch '.*' a* | xargs -0i -- python3 -c 'import sys;print(sum(map(int, sys.argv[2].split())))' _Z_ {}
上記と同じですが、POSIX
パラメータのみが適用されますgrep
。
grep -c '.*' a* | xargs -0i -- python3 -c 'import sys;print(sum(map(int, map(lambda x: x.split(":")[1], sys.argv[2].split()))))' _Z_ {}