Saya perlu menggabungkan beberapa file .CSV (menggunakan cat
perintah) tetapi tanpa menyalin header untuk setiap file.
Apa cara terbaik untuk menyelesaikan tugas ini?
Anda akan membutuhkan lebih dari cat
perintah, seperti dijelaskan di sini :
Katakanlah Anda memiliki 3 file CSV: file1.csv
,, file2.csv
dan file3.csv
dan ingin bergabung dengannya bigfile.csv
dan tajuk Anda selalu (hanya) baris pertama, lalu gunakan
baik (menjaga tajuk dari file pertama "file1.csv"):
cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
atau (hapus tajuk dari semua file yang namanya dimulai dengan "file"):
awk 'FNR > 1' file*.csv > bigfile.csv
cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
tail -n+2
,tail +2
tidak akan berhasilSaya setuju dengan jawaban teratas tetapi saya menyarankan untuk memperpanjangnya dengan skenario berikut (karena saya tidak bisa berkomentar):
Jika Anda ingin file output mengandung header (sekali) skrip yang benar adalah:
awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv
FNR mewakili jumlah catatan yang diproses dalam satu file. Dan NR mewakilinya secara global, jadi baris pertama diterima dan sisanya diabaikan seperti sebelumnya.
sumber
Anda juga bisa menggunakan perintah grup (
{ ; }
) alih-alih proses substitusi (<()
):Ia juga bekerja dengan ujung garis CRLF selama file berakhir dengan garis kosong (
\r\n
).Versi hanya kepala dan ekor dibuat usang oleh POSIX 1003.1-2001, dan itu menghasilkan peringatan di beberapa lingkungan.
sumber
Diperlukan untuk menggabungkan dua CSV besar dengan kolom identik ke dalam CSV yang lebih besar untuk skrip chunking (data tidak memiliki id unik).
Pertama mengambil header dari csv kedua
Selanjutnya, disatukan melalui berikut ini
sumber
Menggunakan urutan perintah di atas menghasilkan file yang tampak seperti ini:
Untuk menjadikannya CSV yang tepat, dengan satu baris tajuk dan semua nilai yang relevan, saya menggunakan
sed
mantra berikut ...sed -ie "/^$/d;/^==>/d" bigfile.csv
sumber
Solusi yang lebih mudah jika Anda memiliki banyak file:
Cukup kembali untuk mengedit file besar dan tambahkan kembali header.
sumber
awk 'FNR > 1' file*.csv > bigfile.csv
? Ini bukan!file