[unix] cat mehrere Dateien, aber Dateinamen als Header enthalten


Answers

Ich habe Grep für etwas Ähnliches benutzt:

grep "" *.txt

Es gibt keinen "Header", sondern jede Zeile mit dem Dateinamen.

Question

Ich möchte eine Reihe von Textdateien in einer großen Datei im Terminal verketten. Ich weiß, dass ich das mit dem Befehl cat tun kann. Ich möchte jedoch, dass der Dateiname jeder Datei dem "data dump" für diese Datei vorangeht. Weiß jemand, wie man das macht?

was ich gerade habe:

file1.txt = bluemoongoodbeer

file2.txt = awesomepossum

file3.txt = hownowbrowncow

cat file1.txt file2.txt file3.txt

gewünschte Ausgabe:

file1

bluemoongoodbeer

file2

awesomepossum

file3

hownowbrowncow



Sie können diesen einfachen Befehl anstelle einer for-Schleife verwenden,

ls -ltr | awk '{print $9}' | xargs head



Zum Lösen dieser Aufgaben verwende ich normalerweise den folgenden Befehl:

$ cat file{1..3}.txt >> result.txt

Es ist eine sehr praktische Möglichkeit, Dateien zu verketten, wenn die Anzahl der Dateien sehr groß ist.




Dies sollte den Trick machen:

for filename in file1.txt file2.txt file3.txt; do
    echo "$filename"
    cat "$filename"
done > output.txt

oder dies für alle Textdateien rekursiv zu tun:

find . -type f -name '*.txt' -print | while read filename; do
    echo "$filename"
    cat "$filename"
done > output.txt



Hier ist ein wirklich einfacher Weg. Sie haben gesagt, Sie möchten cat, was bedeutet, dass Sie die gesamte Datei anzeigen möchten. Aber Sie müssen auch den Dateinamen drucken.

Versuche dies

head -n99999999 * oder head -n99999999 file1.txt file2.txt file3.txt

Ich hoffe, das hilft




Wenn Sie das Ergebnis im selben Format wie Ihre gewünschte Ausgabe möchten, können Sie versuchen:

for file in `ls file{1..3}.txt`; \
do echo $file | cut -d '.' -f 1; \ 
cat $file  ; done;

Ergebnis:

file1
bluemoongoodbeer
file2
awesomepossum
file3
hownowbrowncow

Sie können echo -e vor und nach dem Schnitt einfügen, so dass Sie auch den Abstand zwischen den Linien haben:

$ for file in `ls file{1..3}.txt`; do echo $file | cut -d '.' -f 1; echo -e; cat $file; echo -e  ; done;

Ergebnis:

file1

bluemoongoodbeer

file2

awesomepossum

file3

hownowbrowncow



Ich hatte eine Reihe von Dateien, die in stats.txt endete, die ich mit den Dateinamen verketten wollte.

Ich habe Folgendes getan und wenn es mehr als eine Datei gibt, enthält der Befehl "more" den Dateinamen als Überschrift.

more *stats.txt > stats.txt

oder für einen allgemeinen Fall

more FILES_TO_CONCAT > OUTPUT_FILE



Diese Methode druckt den Dateinamen und dann den Dateiinhalt:

tail -f file1.txt file2.txt

Ausgabe:

==> file1.txt <==
contents of file1.txt ...
contents of file1.txt ...

==> file2.txt <==
contents of file2.txt ...
contents of file2.txt ...





Related