file1.csv
A,,C,D
A,,C,D
A,,C,D
A,,C,D
file2.csv
A,B
A,B
A,B
A,B
Output.csv yang diinginkan
A,B,C,D
A,B,C,D
A,B,C,D
A,B,C,D
Saya sudah mencoba menggunakan "gabung" dan "tempel" tetapi tidak berhasil. Apakah ada perintah bash untuk melakukan ini? Kolom "A" sama di kedua .csv
file.
Jawaban:
Dengan hanya
awk
perintah:Dapatkan baris dari file1 dan simpan ke dalam variabel lokal
f1
, lalu cetak baris yang disimpan di dalamf1
dan akhirnya cetak bidang ketiga ($3
) dan sebagainya ($3
) dari file1 yang dipisahkan dengan koma,
sama sekali, dan ubah OFS (pemisah bidang keluaran [spasi oleh default]) ke koma (,
).Perintah singkatnya akan seperti ini:
tempel file2, lalu potong dan tempel kolom ketiga ke berikutnya (
-f3-
) dari file1.Dengan
awk
danpaste
(opsi A)Perintah di bawah ini juga menyalin dua kolom terakhir (
C,D
) dari file1 di akhir setiap baris di file2:Perintah di atas, tempel konten file2 lalu cetak koma pembatas (
-d','
) kemudian tempelkan dua bidang terakhir (NF
adalah indeks bidang terakhir dan$NF
adalah string yang indeksnyaNF
. Jadi$(NF-1)
adalah bidang kedua sebelum bidang terakhir) dari file1 ketika indeks tersebut mendefinisikan kembali atau membelah dengan penonton koma (-F','
).Dengan
awk
danpaste
(opsi B)Perintah ini juga sama seperti di atas (
$3
dan$4
menunjuk ke bidang ketiga dan keempat dari setiap baris dari file1):Atau solusi lain dengan
cut
perintah:perintah cut di perintah di atas pertama memotong bidang pertama (
-f1
yang diindeks dengan koma pembatas (-d.
)) dari file1 (cut -d, -f1 file1
), kemudian memotong dan menempelkan bidang kedua file2 (cut -d, -f2 file2
) dan akhirnya memotong dan menempelkan kolom ketiga (-f3
) ke yang berikutnya (-
) dari file1 (cut -d, -f3- file1
) lagi.Perintah ini juga mengembalikan hasil yang sama:
tempel bidang kedua dari file1 (
awk -F',' '{print $1}' file1
) lalu cetak koma (-d,
), lalu tempel kolom kedua dari file2 (awk -F',' '{print $2}' file2
), akhirnya tempel kembali kolom kedua dan terakhir dari file1 (awk -F',' '{print $3","$4}' file1
).sumber
Inilah keindahan (saya pikir):
Rusak dalam beberapa langkah:
Langkah 1. Instal csvkit:
Langkah 2. Gunakan perintah join dengan koma sebagai pemisah
Langkah 3. Masukkan kolom yang sebenarnya Anda inginkan. Perhatikan bagaimana Anda mengumpankannya kolom pertama dua kali, karena itu yang benar-benar dilakukan oleh join (perilaku default
join
).atau singkat:
Anda dapat mengarahkan output standar itu ke file (inginkanOutput) jika diinginkan.
Keuntungan
Metode ini memiliki beberapa keunggulan dibandingkan yang lain yang diusulkan.
Pertama dan terpenting: ia melakukan gabung yang nyata. Itu berarti dapat digunakan untuk data yang lebih kompleks juga. Sangat mudah untuk melakukan gabung di bidang lain, misalnya. Itu tidak hanya melihat posisi lapangan, tetapi benar-benar mempertimbangkan kolom. Ini benar-benar berfungsi dengan format data (csv) dan tidak memperlakukannya seperti teks.
Kedua, ia menggunakan toolkit csv yang sangat kuat yang juga memungkinkan Anda untuk a) menampilkan statistik dengan satu perintah (
csvstats)
, b) memeriksa apakah datanya bersih (csvclean
), tetapi juga untuk mengubahnya menjadi json, menjadi sql, atau bahkan memuatnya ke dalam ular sanca! Toolkit ini banyak digunakan dalam ilmu data untuk persiapan data.sumber
sudo apt-get install python-dev python-pip python-setuptools build-essential
- linkIni satu lagi yang indah. Saya pikir ini adalah saran yang paling mudah, sejauh ini.
Jika Anda belum menginstal csvtool di masa lalu, Anda harus melakukannya
sudo apt-get install csvtool
.Dari dokumen:
Perhatikan bagaimana dalam kasus kami, kami mengganti kolom kedua file.
Contohnya
file1.csv
file2.csv
Menggabungkan dua file:
Apa yang pada dasarnya Anda lakukan adalah menempelkan kolom dua
file2.csv
sebagai kolom 2 difile1.csv
.Perhatikan bahwa ini juga berfungsi pada dokumen yang sama. Jika Anda ingin menukar dua kolom, Anda dapat melakukannya dengan menggunakan file yang sama dengan input.csv dan update.vsc.
sumber
Untuk memindahkan jumlah kolom yang dipilih dari satu file ke file lain:
dari dua file:
file_1
file_2
Ketika Anda mengatur
cols = 1
:Tetapi ketika Anda mengatur
cols = 2
:cols = 3
:Cara Penggunaan
Salin ke file kosong, setel path ke
file1
,file2
dan jumlah kolom untuk dipindahkan, simpan sebagaimove.py
dan jalankan dengan:Juga dimungkinkan untuk menambahkan satu atau lebih kolom dari tengah kolom file sumber dengan cara ini.
sumber
import csv
.Metode lain dalam python melalui modul csv.
script.py
Untuk menjalankan skrip di atas,
Keluaran:
sumber