以下の files.txt リストがあります。
-rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt
-rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt
-rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt
出力:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
出力を取得する方法は次のとおりです。
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
地図が必要です。
ベストアンサー1
cat
ファイルに存在しないデータは出力できません。ファイルが空の場合、空行を出力として提供する改行文字もありません。
ファイルに改行文字が 1 つ以上含まれていることを確認できます。
以下はawk
GNUの使用を確認する方法です(空のファイルを修正しました)。
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
これENDFILE
ブロックは、すべてのファイルの読み取りが完了した後に実行されます。 0 の場合、FNR
ファイル内のどの行も見たことがないので、改行文字を挿入します。その後、スクリプトは次のファイルに移動します。
cat
その後、質問のように使用できます。
あるいは、ファイルを変更せずにGNUを使用してください。awk
変える cat
:
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
これは、上記のように空のファイルを検索するのと同じですが、ファイルの代わりに標準出力に改行を印刷します。1
末尾の項目を で置き換えると、{ print }
空でないファイルのすべてのデータが出力されます。
またはシェルループ(すべてのPOSIXシェルで動作する必要があります):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
-s
ファイルが存在し、サイズが0より大きい場合、テストはtrueです。
[Blank]
空のファイルのリテラル文字列を出力するには、上記の呼び出しの\n
前にその文字列を挿入するだけですprintf
(コードでも機能しますawk
)。