Saya memiliki banyak file yang ingin saya gabungkan cat
. Katakanlah
File1.txt
foo
File2.txt
bar
File3.txt
qux
Saya ingin menyimpulkan sehingga file terakhir terlihat seperti:
foo
bar
qux
Bukan ini dengan biasanya cat File*.txt > finalfile.txt
foo
bar
qux
Bagaimana cara yang benar untuk melakukannya?
Jawaban:
Anda dapat melakukan:
Pastikan file
finalfile.txt
tidak ada sebelum Anda menjalankan perintah di atas.Jika Anda diizinkan untuk menggunakan,
awk
Anda dapat melakukan:sumber
AWK '{print $0}' *.txt
awk 'FNR==1 && NR > 1 ...'
sebaliknya.>finalfile.txt
setelahdone
Anda dapat menimpa alih-alih menambahkan, yang akan menghapus persyaratan untuk memastikan file tersebut hilang atau kosong sebelum perulangan.Jika Anda memiliki cukup sedikit file yang dapat Anda daftarkan masing-masing, maka Anda dapat menggunakan substitusi proses di Bash, menyisipkan baris baru di antara setiap pasangan file:
sumber
Jika saya melakukannya, saya akan menggunakan sed:
Dalam pola sed ini $ memiliki dua arti, pertama cocok dengan nomor baris terakhir saja (sebagai rentang baris untuk menerapkan pola) dan kedua cocok dengan akhir baris dalam pola substitusi.
Jika versi sed Anda tidak memiliki
-s
(memproses file input secara terpisah), Anda dapat melakukan semuanya sebagai loop:sumber
sed -s '$G' *.txt > finalfile.txt
find
sebagai pengganti*.txt
, yang berarti file itu ditambahkan ke dirinya sendiri!Anda dapat melakukannya dengan menggunakan
xargs
jika Anda suka, tetapi ide utamanya masih sama:sumber
xargs
jauh lebih mudah digunakan daripada loop di bash.Ini berfungsi di Bash:
Berbeda dengan jawaban dengan
>>
(append), output dari perintah ini dapat disalurkan ke program lain.Contoh:
for f in File*.txt; do cat $f; echo; done > finalfile.txt
(for ... done) > finalfile.txt
(orang tua adalah opsional)for ... done | less
(menyalurkan lebih sedikit)for ... done | head -n -1
(ini menghilangkan garis kosong yang tertinggal)sumber
Begitulah cara saya melakukannya di OsX 10.10.3
karena perintah 'echo' sederhana tanpa parameter berakhir dengan tidak ada baris baru yang dimasukkan.
sumber
Dalam python, ini digabungkan dengan baris kosong antar file (
,
menekan menambahkan baris kosong tambahan):Ini adalah python one-liner jelek yang dapat dipanggil dari shell dan mencetak hasilnya ke file:
sumber