catkann keine Daten ausgeben, die nicht in den Dateien vorhanden sind. Wenn eine Datei leer ist, enthält sie nicht einmal ein Zeilenumbruchzeichen, um eine leere Zeile als Ausgabe bereitzustellen.
Sie können sicherstellen, dass die Dateien mindestens ein einzelnes Zeilenumbruchzeichen enthalten.
So verwenden Sie GNU, awkum sicherzustellen, dass (dies ändert die leeren Dateien):
awk 'ENDFILE { if (FNR == 0) printf("\n") >>FILENAME }' 2[0-8]_SumActive.txt
Der ENDFILEBlock wird ausgeführt, nachdem das Lesen einer der Dateien abgeschlossen ist. Wenn FNRNull ist, haben wir keine Zeilen in der Datei gesehen, daher fügen wir eine einzelne neue Zeile ein. Das Skript fährt dann mit der nächsten Datei fort.
Sie können dann catwie in der Frage verwendet verwenden.
Alternativ, ohne die Dateien zu ändern, verwenden Sie GNU awk anstelle von cat :
awk 'ENDFILE { if (FNR == 0) printf("\n") } 1' 2[0-8]_SumActive.txt
Dies macht die gleiche Art der Erkennung leerer Dateien wie oben, druckt jedoch die neue Zeile in die Standardausgabe und nicht in die Datei. Das 1am Ende könnte durch ersetzt werden { print }und bewirkt, dass alle Daten in den nicht leeren Dateien ausgegeben werden.
Alternativ eine Shell-Schleife (sollte in jeder POSIX-Shell funktionieren):
for name in ./2[0-8]_SumActive.txt; do
if [ -s "$name" ]; then
cat "$name"
else
printf '\n'
fi
done
Der -sTest ist wahr, wenn die Datei vorhanden ist und eine Größe größer als Null hat.
Wenn Sie möchten [Blank], dass die Literalzeichenfolge für leere Dateien ausgegeben wird, fügen Sie diese Zeichenfolge einfach vor \nden printfobigen Aufrufen ein (dies funktioniert auch im awkCode).