Ich habe eine Liste von files.txt unten:
-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
Ausgabe:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
So erhalten Sie die Ausgabe wie folgt:
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
Brauchen Sie Anleitung.
command-line
solaris
Wenige
quelle
quelle
[Blank]
haben Sie diese 7 Zeichen gemeint oder wollten Sie eine leere Zeile angeben?Antworten:
cat
kann 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,
awk
um sicherzustellen, dass (dies ändert die leeren Dateien):Der
ENDFILE
Block wird ausgeführt, nachdem das Lesen einer der Dateien abgeschlossen ist. WennFNR
Null 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
cat
wie in der Frage verwendet verwenden.Alternativ, ohne die Dateien zu ändern, verwenden Sie GNU
awk
anstelle voncat
: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
1
am 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):
Der
-s
Test 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\n
denprintf
obigen Aufrufen ein (dies funktioniert auch imawk
Code).quelle
Mit
perl
Wenn am Ende ein Zeilenumbruchzeichen hinzugefügt wird, wird eine leere Zeile für leere Dateien ausgegeben, aber auch eine neue Zeile für nicht leere Dateien hinzugefügt, bei denen solche fehlen (und die am Ende in einer einzelnen Zeile mit verkettet werden
cat
).quelle
(Dies ist nicht genau das, was Sie fragen, aber :) In solchen Situationen bevorzuge ich
head
Normalerweise ist es das, was Sie wollen. Wenn nicht, ist
sed
es später einfachquelle
Mit
xargs
undgrep
Sie könnten etwas versuchen wie:quelle
Angenommen,
[Blank]
Sie meinen damit wörtliche Leerzeilen, sollte dies funktionieren:quelle
Sie können jede Datei testen, um festzustellen, ob sie die Länge Null hat, bevor Sie versuchen, ihren Inhalt anzuzeigen:
Ich habe
awk 1 "$f"
stattcat "$f"
weilawk
garantiert, um die Ausgabe einer Datei mit einem Zeilenumbruch zu beenden.Wenn Sie in Ihrer Frage beabsichtigt haben, dass
[blank]
dies kein Literal, sondern nur eine Leerzeile sein soll, können Sie dies mithilfe des obigen Codes implementieren und'[Blank]'
am Ende derecho
Anweisung entfernen .quelle
Ich gehe davon aus, dass Ihre Dateien 26_SumActive.txt und 28_SumActive.txt leer sind und Sie leere Zeilen benötigen, wenn Sie deren Inhalt anzeigen
Dazu können Sie einfach Ihre Dateiliste durchlaufen und deren Inhalt überprüfen. Wenn die Datei leer ist, geben Sie eine leere Zeile ein.
[ -s FILE ]
True, wenn FILE vorhanden ist und eine Größe größer als Null hat.quelle
if [ -s $i ]; then cat $i; else echo -e ""; fi;
. Immer noch +1 für einen einfachen Test mit nur Standard-Shell-Funktionalität.cat "$i"; test -s "$i" || echo
- keine Notwendigkeit für diese unhandlichenif
oder nicht tragbarenecho
Flaggen.where - ermöglicht cat das Lesen von Standardeingaben.
Nach dem Anzeigen des Inhalts Ihrer Dateien wartet cat auf Ihre Eingabe. Sie können Ihre gewünschte Eingabe vornehmen, indem Sie die Eingabetaste für wörtliche Leerzeichen oder [Leerzeichen] drücken, wenn Sie dies wünschen. Nach jeder Eingabe drücken Sie die Eingabetaste. Sobald alle Eingaben vorgenommen wurden, drücken Sie ^ D (Strg + D) und Sie sind fertig.
PS: Für jeden Eingang erhalten Sie einen entsprechenden Ausgang.
Auf diese Weise können Sie Leerzeichen oder etwas anderes zwischen zwei Ausgabesequenzen einfügen.
quelle
cat
als Lösung anbieten und dem OP erlauben, was sie wollen.