สมมติว่าคุณมีไฟล์ CSV หนึ่งไฟล์ที่มี 2 ฟิลด์: ID และอีเมล คุณมีไฟล์อื่นที่มี 2 ฟิลด์: อีเมลและชื่อ คุณจะสร้างไฟล์ที่มีทั้งสามฟิลด์เข้าร่วมในอีเมลได้อย่างไร
สมมติว่าคุณมีไฟล์ CSV หนึ่งไฟล์ที่มี 2 ฟิลด์: ID และอีเมล คุณมีไฟล์อื่นที่มี 2 ฟิลด์: อีเมลและชื่อ คุณจะสร้างไฟล์ที่มีทั้งสามฟิลด์เข้าร่วมในอีเมลได้อย่างไร
คำตอบ:
รุ่นที่ 3 :
คุณต้องเรียงลำดับรายการทั้งสองทางอีเมลตามลำดับตัวอักษรจากนั้นเข้าร่วม ระบุว่าฟิลด์อีเมลนั้นเป็นฟิลด์ที่ 2 ของ file1 และฟิลด์ที่ 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
ความหมายของพารามิเตอร์
-t,: ',' เป็นตัวคั่นฟิลด์ -k 2,2: การจัดเรียงอักขระในฟิลด์ที่ 2 -k 1,1: การจัดเรียงอักขระในฟิลด์ที่ 1 -1 2: ไฟล์ 1, ฟิลด์ 2 -2 1: ไฟล์ 2, ฟิลด์ที่ 1 >: เอาท์พุทเป็นไฟล์
ผลิต
อีเมล ID ชื่อ อีเมล ID ชื่อ ...
จัดเรียงตามตัวอักษรอีเมล
โปรดทราบว่าหากอีเมลใดหายไปจากไฟล์ใดไฟล์หนึ่งอีเมลนั้นจะถูกตัดออกจากผลลัพธ์
อาจเป็น overkill แต่คุณสามารถนำเข้าสู่ฐานข้อมูล (เช่น OpenOffice Base) เป็นตารางสองชนิดและกำหนดรายงานที่เป็นผลลัพธ์ที่ต้องการ
หากการนำเข้า CSV เป็นปัญหาแสดงว่าโปรแกรมสเปรดชีต (เช่น OpenOffice Calc) สามารถทำการนำเข้าได้ สามารถโอนผลลัพธ์ไปยังฐานข้อมูลได้อย่างง่ายดาย
เป็นข้อมูลอ้างอิงในอนาคตคุณอาจต้องการที่จะเริ่มต้นการเล่นรอบกับAWK มันเป็นภาษาสคริปต์เล็ก ๆ ที่เรียบง่ายที่มีอยู่ในบางรูปแบบในระบบ * nix และภารกิจเดียวของมันคือชีวิตคือการจัดการฐานข้อมูลแบบข้อความที่คั่นด้วยมาตรฐาน ด้วยสคริปต์บทคัดลอกสองสามบรรทัดคุณสามารถทำสิ่งที่มีประโยชน์มากได้ ภาษามีขนาดเล็กและสวยงามและมีอัตราส่วนยูทิลิตี้ / ความซับซ้อนที่ดีกว่าสิ่งอื่นที่ฉันรู้
ใช้งาน 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()
}
ลองCSV Cruncher
ใช้ไฟล์ CSV เป็นตาราง SQL จากนั้นอนุญาตให้ใช้คิวรี SQL ทำให้มีไฟล์ CSV หรือ JSON อื่น
สำหรับกรณีของคุณคุณจะโทร:
crunch -in tableA.csv tableB.csv -out output.csv \
"SELECT tableA.id, tableA.email, tableB.name
FROM tableA LEFT JOIN tableB USING (email)"
เครื่องมือต้องการ Java 8 หรือใหม่กว่า
ข้อดีบางประการ:
join
โซลูชันที่ใช้คำเตือน:ฉันเขียนเครื่องมือนั้น มันเคยเป็นความไม่ลงรอยกันหลังจาก Google Code ถูกปิดลง แต่ฉันได้รับการฟื้นฟูและเพิ่มคุณสมบัติใหม่เมื่อฉันใช้งาน
คุณสามารถอ่านไฟล์ CSV ด้วยโปรแกรมสเปรดชีตเช่น LibreOffice และใช้VLOOKUP()
มาโครเพื่อค้นหาชื่อในไฟล์ที่สอง
คุณสามารถใช้เครื่องมือที่ออกแบบมาสำหรับการเข้าร่วมไฟล์ csv เช่นที่พบในhttps://filerefinery.com
การดำเนินการที่เราสนับสนุนในปัจจุบันคือ: การเข้าร่วมไฟล์ csv เป็นไปได้ที่จะดำเนินการเทียบเท่า SQL ของการดำเนินการเข้าร่วมด้านนอกด้านในด้านซ้ายและด้านขวาในสองไฟล์ csv จะใช้คอลัมน์ใดเป็นคีย์เข้าร่วมในแต่ละไฟล์ซึ่งสามารถกำหนดค่าได้