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?

Jawaban:


40

Jika Anda tidak terlalu cerewet tentang penampilan pemisah:

tail -n +1 *

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


Maaf atas komentar buruk, tapi ini luar biasa. Terima kasih, @Gilles
Mike D


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) ..


2
+1 untuk awk! Aku bersumpah itu bisa melakukan apa saja ...
brad
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.