Misalkan Anda memiliki satu file CSV dengan 2 bidang: ID dan email. Anda memiliki file lain dengan 2 bidang: email dan nama. Bagaimana Anda bisa menghasilkan file dengan ketiga bidang digabung pada email?
Misalkan Anda memiliki satu file CSV dengan 2 bidang: ID dan email. Anda memiliki file lain dengan 2 bidang: email dan nama. Bagaimana Anda bisa menghasilkan file dengan ketiga bidang digabung pada email?
Jawaban:
Revisi3 :
Anda harus mengurutkan kedua daftar di email sesuai abjad, lalu bergabung. Mengingat bahwa bidang email bidang ke-2 file1 dan bidang ke-1 file2:
sort -t , -k 2,2 file1.csv > sort1.csv
sort -t , -k 1,1 file2.csv > sort2.csv
join -t , -1 2 -2 1 sort1.csv sort2.csv > sort3.csv
makna parameter
-t,: ',' adalah pemisah bidang -k 2,2: sort karakter pada bidang ke-2 -k 1,1: pengurutan karakter pada bidang 1 -1 2: file 1, bidang ke-2 -2 1: file 2, bidang 1 >: output ke file
menghasilkan
email, ID, nama email, ID, nama ...
disortir berdasarkan email berdasarkan abjad.
Perhatikan bahwa jika ada email yang hilang dari salah satu file itu akan dihilangkan dari hasil.
Mungkin ini berlebihan, tetapi Anda dapat mengimpor ke dalam basis data (mis. Basis OpenOffice) sebagai dua jenis tabel dan mendefinisikan laporan yang merupakan keluaran yang diinginkan.
Jika impor CSV merupakan masalah, maka program spreadsheet (mis. OpenOffice Calc) dapat melakukan impor. Hasilnya kemudian dapat dengan mudah ditransfer ke database.
Sebagai referensi di masa mendatang, Anda mungkin ingin mulai bermain-main dengan AWK . Ini adalah bahasa scripting kecil yang sangat sederhana yang ada dalam beberapa bentuk pada setiap sistem * nix dan satu-satunya misinya adalah hidup adalah manipulasi dari basis data teks standar yang dibatasi. Dengan beberapa baris script sekali pakai Anda dapat melakukan beberapa hal yang sangat berguna. Bahasa ini kecil dan elegan dan memiliki rasio utilitas / kompleksitas yang lebih baik daripada apa pun yang saya ketahui.
Gunakan Go: https://github.com/chrislusf/gleam
package main
import (
"flag"
"os"
"github.com/chrislusf/gleam"
"github.com/chrislusf/gleam/source/csv"
)
var (
aFile = flag.String("a", "a.csv", "first csv file with 2 fields, the first one being the key")
bFile = flag.String("b", "b.csv", "second csv file with 2 fields, the first one being the key")
)
func main() {
flag.Parse()
f := gleam.New()
a := f.Input(csv.New(*aFile))
b := f.Input(csv.New(*bFile))
a.Join(b).Fprintf(os.Stdout, "%s,%s,%s\n").Run()
}
Coba CSV Cruncher .
Dibutuhkan file CSV sebagai tabel SQL dan kemudian memungkinkan query SQL, menghasilkan file CSV atau JSON lain.
Untuk kasus Anda, Anda cukup menelepon:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Alat ini membutuhkan Java 8 atau lebih baru.
Beberapa keuntungan:
join
solusi berbasiskan.Penafian: Saya menulis alat itu. Dulu berantakan setelah Google Code ditutup, tetapi saya menghidupkannya kembali dan menambahkan fitur baru saat saya menggunakannya.
Anda bisa membaca file CSV dengan program spreadsheet seperti LibreOffice dan menggunakan VLOOKUP()
makro untuk mencari nama di file kedua.
Anda juga dapat menggunakan alat yang dirancang khusus untuk menggabungkan file csv, seperti yang ditemukan di https://filerefinery.com
Operasi yang saat ini kami dukung adalah: Menggabungkan file csv. Dimungkinkan untuk melakukan setara SQL operasi gabungan luar, dalam, kiri dan kanan pada dua file csv. Kolom mana yang akan digunakan sebagai kunci bergabung di setiap file yang dapat dikonfigurasi.