catコマンドで空白行を表示する

catコマンドで空白行を表示する

以下の 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 つ以上含まれていることを確認できます。

以下はawkGNUの使用を確認する方法です(空のファイルを修正しました)。

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)。

答え2

そしてperl

perl -0777 -pe 's/\n?\z/\n/' 2[0-8]_SumActive.txt

末尾に改行がない場合は改行が追加されるため、空のファイルに対して空の行が出力されますが、改行のない空でないファイルにも改行が追加されます(そして最終的にリンクされます)。一行cat)。

答え3

(正確に要求されたものではありませんが:)この場合は、以下を使用することをお勧めします。head

$ head -z 2[0-8]_SumActive.txt
==> 21_SumActive.txt <==
Sum: 47760  
Sum: 72000  
Sum: 0  

==> 22_SumActive.txt <==

==> 25_SumActive.txt <==

==> 28_SumActive.txt <==

一般的に、これはあなたが望むものです。そうでなければsed後で楽になるでしょう

答え4

リテラルの空行を意味すると仮定すると、[Blank]次のように動作します。

paste -s 2[0-8]_SumActive.txt

関連情報