Linux: cat dengan pemisah di antara file

28

Di Linux jika Anda mengetikkan cat *, Anda akan mendapatkan sesuatu seperti ini:

line1 dari file1
line2 dari file1
line1 dari file2
line1 dari file3
line2 dari file3
line3 dari file3

Yang saya inginkan adalah menampilkan pemisah di antara file. Sesuatu seperti ini:
line1 dari file1
line2 dari file1
XXXXXXXXXXXX
line1 dari file2
XXXXXXXXXXXX
line1 dari file3
line2 dari file3
line3 dari file3

Apakah itu semudah mungkin dengan satu liner yang mudah diketik dengan hati?

Daniele
sumber

Jawaban:

40

Jika Anda tidak terlalu cerewet tentang penampilan pemisah:

tail -n +1 *
Gilles 'SANGAT berhenti menjadi jahat'
sumber
Ini bagus! Saya terkejut bagaimana perintah Anda berbeda dari ekor -n 1 *. Saya juga tidak dapat menemukan penyebutan efek +1 (lebih dari 1) di halaman manual.
Daniele
1
tail -n Xmenunjukkan garis X terakhir. tail -n +Xdimulai pada baris X mulai dari 1 , yaitu, ia menunjukkan semua kecuali baris pertama (X-1).
Gilles 'SO- stop being evil'
Ah, sekarang saya bisa melihatnya di halaman manual. Saya mengabaikannya. Hebat, terima kasih banyak
Daniele
Solusi serupa ada di artikel ini: everythingsysadmin.com/2012/09/unorthodoxunix.html
TomOnTime
Maaf atas komentar buruk, tapi ini luar biasa. Terima kasih, @Gilles
Mike D
17

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

Janne Pikkarainen
sumber
kalahkan saya :-)
Sirex
Namun solusi yang disediakan oleh Gilles sangat singkat!
Janne Pikkarainen
Wow. bekerja heran. Bantu saya menyatukan folder JSON
Mayank
11
awk 'FNR==1 && NR!=1 {print "XXXXXXXXXXXX"}{print}' *

Atau

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

Atau

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

Hanya menggunakan Bash (tidak cat):

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

Edit:

Dalam AWK 4:

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

Anda dapat menggunakan pemisah apa pun seperti yang ada di contoh lain dalam jawaban ini. Jika Anda ingin pemisah di akhir setiap file, ubah BEGINFILEke ENDFILE. Itu masih dapat muncul di awal skrip karena ini merupakan syarat (daripada menyiratkan urutan eksekusi) ..

Dijeda sampai pemberitahuan lebih lanjut.
sumber
2
+1 untuk awk! Aku bersumpah itu bisa melakukan apa saja ...
brad