Giả sử bạn có một tệp CSV có 2 trường: ID và email. Bạn có một tệp khác với 2 trường: email và tên. Làm thế nào bạn có thể tạo một tệp có cả ba trường được tham gia trên email?
Giả sử bạn có một tệp CSV có 2 trường: ID và email. Bạn có một tệp khác với 2 trường: email và tên. Làm thế nào bạn có thể tạo một tệp có cả ba trường được tham gia trên email?
Câu trả lời:
Sửa đổi 3 :
Bạn phải sắp xếp cả hai danh sách trên email theo thứ tự abc, sau đó tham gia. Cho rằng trường email trường thứ 2 của tệp1 và trường thứ 1 của tệp2:
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
ý nghĩa tham số
-t ,: ',' là dấu phân cách trường -k 2,2: sắp xếp ký tự trên trường thứ 2 -k 1,1: sắp xếp ký tự trên trường thứ 1 -1 2: tệp 1, trường thứ 2 -2 1: tệp 2, trường thứ 1 >: xuất ra tệp
sản xuất
email, ID, tên email, ID, tên ...
sắp xếp theo email theo thứ tự abc.
Lưu ý rằng nếu bất kỳ email nào bị thiếu trong một trong hai tệp, nó sẽ bị bỏ qua khỏi kết quả.
Có lẽ nó quá mức cần thiết, nhưng bạn có thể nhập vào cơ sở dữ liệu (ví dụ: OpenOffice Base) dưới dạng hai loại bảng và xác định báo cáo là đầu ra mong muốn.
Nếu nhập CSV là một vấn đề, thì chương trình bảng tính (ví dụ OpenOffice Calc) có thể thực hiện nhập. Kết quả sau đó có thể dễ dàng được chuyển đến cơ sở dữ liệu.
Là một tài liệu tham khảo trong tương lai, bạn có thể muốn bắt đầu chơi xung quanh với AWK . Đó là một ngôn ngữ kịch bản nhỏ rất đơn giản tồn tại ở một số dạng trên mọi hệ thống * nix và nhiệm vụ duy nhất của nó là cuộc sống là thao tác với các cơ sở dữ liệu văn bản được phân tách tiêu chuẩn. Với một vài dòng script bỏ đi, bạn có thể làm một số điều rất hữu ích. Ngôn ngữ này nhỏ và thanh lịch và có tỷ lệ tiện ích / độ phức tạp tốt hơn bất kỳ thứ gì khác mà tôi biết.
Sử dụng Đi: 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()
}
Hãy thử CSV Cruncher .
Nó nhận các tệp CSV dưới dạng bảng SQL và sau đó cho phép truy vấn SQL, dẫn đến một tệp CSV hoặc JSON khác.
Đối với trường hợp của bạn, bạn sẽ chỉ gọi:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
Công cụ cần Java 8 trở lên.
Một số ưu điểm:
join
các giải pháp dựa trên.Tuyên bố từ chối trách nhiệm: Tôi đã viết công cụ đó. Nó đã từng bị xáo trộn sau khi Google Code bị đóng, nhưng tôi đã phục hồi nó và thêm các tính năng mới khi tôi sử dụng nó.
Bạn có thể đọc tệp CSV bằng chương trình bảng tính như LibreOffice và sử dụng VLOOKUP()
macro để tìm kiếm tên trong tệp thứ hai.
Bạn cũng có thể sử dụng một công cụ được thiết kế đặc biệt để tham gia các tệp csv, chẳng hạn như công cụ được tìm thấy trên https://filerefowder.com
Các hoạt động chúng tôi hiện đang hỗ trợ là: Tham gia các tệp csv. Có thể thực hiện tương đương SQL của các hoạt động nối ngoài, trong, trái và phải trên hai tệp csv. Cột nào sẽ được sử dụng làm khóa tham gia trong mỗi tệp có thể định cấu hình được.