Linux: Katze mit Trennzeichen zwischen Dateien

28

Wenn Sie unter Linux cat * eingeben, erhalten Sie ungefähr Folgendes:

Zeile1 von Datei1
Zeile2 von Datei1 Zeile1
von Datei2
Zeile1 von Datei3
Zeile2 von Datei3
Zeile3 von Datei3

Ich möchte ein Trennzeichen zwischen Dateien anzeigen. Etwas wie folgt aus :
line1 von file1
line2 von file1
XXXXXXXXXXXX
line1 von file2
XXXXXXXXXXXX
line1 von file3
line2 von file3
line3 von file3

Ist das mit einem Einzeiler, der auswendig leicht zu tippen ist, problemlos möglich?

Daniele
quelle

Antworten:

40

Wenn Ihnen das Aussehen des Trennzeichens nicht allzu pingelig ist:

tail -n +1 *
Gilles 'SO - hör auf böse zu sein'
quelle
Das ist toll! Ich bin überrascht, wie sich Ihr Befehl von tail -n 1 * unterscheidet. Ich kann auch keine Erwähnung der Wirkung von +1 (Rathen als 1) in der Manpage finden.
Daniele
1
tail -n Xzeigt die letzten X Zeilen. tail -n +Xbeginnt bei Zeile X und beginnt bei 1 , dh es werden alle außer den ersten (X-1) Zeilen angezeigt.
Gilles 'SO- hör auf böse zu sein'
Ah, jetzt kann ich das auf der Manpage sehen. Ich habe es übersehen. Großartig, vielen Dank
Daniele
Ähnliche Lösungen finden Sie in diesem Artikel: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime
Entschuldigung für den schlechten Kommentar, aber das ist großartig. Vielen Dank, @ Gilles
Mike D
17

cd /to/your/directory; for each in *; do cat $each; echo "XXXXXXXXXXX"; done

Janne Pikkarainen
quelle
schlagen Sie mich dazu :-)
Sirex
Trotzdem ist die von Gilles bereitgestellte Lösung beeindruckend kurz!
Janne Pikkarainen
Wow. Wunder wirkt. Hat mir geholfen, einen Ordner mit JSONs zu verketten
Mayank Chandak
11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Oder

awk 'FNR==1 {print "XXXXXX", FILENAME, "XXXXXX"}{print}' *

Oder

awk 'FNR==1 {print "XXXXXX File no. " ++count, "XXXXXX"}{print}' *

Verwenden Sie nur Bash (nein cat):

for file in *; do printf "$(<"$file")\nXXXXXXXXXXXX\n"; done

Bearbeiten:

In AWK 4:

awk 'BEGINFILE {print "XXXXXXXXXXXX"}{print}' *

In dieser Antwort können Sie ein beliebiges Trennzeichen wie in den anderen Beispielen verwenden. Wenn Sie das Trennzeichen am Ende jeder Datei verwenden möchten, ändern Sie es BEGINFILEin ENDFILE. Es kann immer noch am Anfang des Skripts angezeigt werden, da es eine Bedingung ist (anstatt eine Ausführungsreihenfolge zu implizieren).

Bis auf weiteres angehalten.
quelle
2
+1 für awk! Ich schwöre, es kann alles ...
Brad