あなたがループから直接パイプすることができます:いずれの場合で
for date in "${_date_a[@]}"
do
zcat "$_srcdir01/$date.gz"
done | awk '{sum += 1} END {print sum;}'
を掲示として、そのコードはそのエラーを与えるべきではありません。
あなたの例では、完全または自己完結型ではないので、私はテストにデータファイルを初期化するためにいくつかのコードを追加:
$ cat testscript
_srcdir01="./././././././././././././././././././"
_date_a=(foo{0001..0050})
for file in "${_date_a[@]}"
do
echo "hello world" | gzip > "$file.gz"
done
for i in {0..49}
do
_file_list="$_file_list $_srcdir01/${_date_a[$i]}.gz"
done
eval zcat "$_file_list" | awk '{sum += 1} END {print sum;}'
は、テストデータの束を生成し、正しく行数を合計実行:
$ bash testscript
50
私はあなたの問題を再現できます。 eval
を削除します。
$ bash testscript
(...)/foo0045.gz ./././././././././././././././././././/foo0046.gz ././././././.
/././././././././././././/foo0047.gz ./././././././././././././././././././/foo0
048.gz ./././././././././././././././././././/foo0049.gz ./././././././././././.
/./././././././/foo0050.gz: file name too long
ですから、POSTコードは、実行コードではなく、それを解決しようとしているときに、あなたが作った他のいくつかの試みの一つであることを再確認してください。
'eval'を削除した場合、それは倍数ではなく単一の*ファイル名としてすべてのものを渡します。 – o11c
'awk '{sum + = 1} END {print sum;}''を 'awk 'END {print NR}''に置き換えることができます。 –
謝罪します。私は働いていた解決策を持っていました..しかし、ループソリューションのzcatが好きなのは、そのクリーナーだからです。私は最終的な結果の違いは見当たりませんでしたが、 '$ list_of_files"のファイルのための背景動作の違いは do zcatファイル done'と 'zcat long_long_list_of files'ですか? – dorachan2010