จะเข้าร่วมไฟล์ CSV สองไฟล์ได้อย่างไร


22

สมมติว่าคุณมีไฟล์ CSV หนึ่งไฟล์ที่มี 2 ฟิลด์: ID และอีเมล คุณมีไฟล์อื่นที่มี 2 ฟิลด์: อีเมลและชื่อ คุณจะสร้างไฟล์ที่มีทั้งสามฟิลด์เข้าร่วมในอีเมลได้อย่างไร


5
รายละเอียดเพิ่มเติมเล็กน้อยเกี่ยวกับการเข้าร่วม (เช่นด้านในด้านนอกด้านนอก) รายการอีเมลใน CSV ที่ 1 เหมือนกับรายการที่สองหรือไม่ หรือมีมากกว่าหนึ่ง?
hyperslug

ตัวอย่างของไฟล์ csv จะมีประโยชน์พร้อมกับระบบปฏิบัติการที่คุณใช้อยู่?
Troggy

ฉันคิดว่ารายการที่ 1 และ 2 เหมือนกัน ฉันใช้ลีนุกซ์ กรุณาช่วย!!! ขอบคุณ !! :)
crst53

1
ข้อมูลมีขนาดใหญ่แค่ไหน?
โจชัว

คำตอบ:


24

รุ่นที่ 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 ชื่อ
...

จัดเรียงตามตัวอักษรอีเมล

โปรดทราบว่าหากอีเมลใดหายไปจากไฟล์ใดไฟล์หนึ่งอีเมลนั้นจะถูกตัดออกจากผลลัพธ์


2
CSV มีความซับซ้อนมากกว่านี้ ตัวคั่นฟิลด์สามารถหลบหนีได้
pguardiario

@hyperslug ฉันจะเข้าร่วมเต็มรูปแบบภายนอกได้ไหม?
Abu Shoeb

สิ่งนี้จะไม่ทำงานหากมีการอ้างอิง / ยกเลิกการอ้างอิง CSV แบบผสมหาก ID มีเครื่องหมายจุลภาค ใช้โซลูชันนี้สำหรับการประมวลผลครั้งเดียวที่คุณตรวจสอบผลลัพธ์เท่านั้น แต่ฉันแนะนำไม่ให้ใช้กับสคริปต์ระดับการผลิต
Ondra Žižka

25

ใช้csvkit :

csvjoin -c email id_email.csv email_name.csv

หรือ

csvjoin -c 2,1 id_email.csv email_name.csv

4
ทำไมนี่ไม่ใช่คำตอบยอดนิยม
alexg

เครื่องมือที่ยอดเยี่ยม แม้จะรู้จักแล้วว่าหนึ่งในไฟล์ของฉันมีตัวคั่น "," ที่แตกต่างกัน
D_K

6

อาจเป็น overkill แต่คุณสามารถนำเข้าสู่ฐานข้อมูล (เช่น OpenOffice Base) เป็นตารางสองชนิดและกำหนดรายงานที่เป็นผลลัพธ์ที่ต้องการ

หากการนำเข้า CSV เป็นปัญหาแสดงว่าโปรแกรมสเปรดชีต (เช่น OpenOffice Calc) สามารถทำการนำเข้าได้ สามารถโอนผลลัพธ์ไปยังฐานข้อมูลได้อย่างง่ายดาย


4

เป็นข้อมูลอ้างอิงในอนาคตคุณอาจต้องการที่จะเริ่มต้นการเล่นรอบกับAWK มันเป็นภาษาสคริปต์เล็ก ๆ ที่เรียบง่ายที่มีอยู่ในบางรูปแบบในระบบ * nix และภารกิจเดียวของมันคือชีวิตคือการจัดการฐานข้อมูลแบบข้อความที่คั่นด้วยมาตรฐาน ด้วยสคริปต์บทคัดลอกสองสามบรรทัดคุณสามารถทำสิ่งที่มีประโยชน์มากได้ ภาษามีขนาดเล็กและสวยงามและมีอัตราส่วนยูทิลิตี้ / ความซับซ้อนที่ดีกว่าสิ่งอื่นที่ฉันรู้


Perl มีหลายวิธีในการสืบทอดของ awk
reinierpost

awk ไม่ได้จัดการกับข้อความและการหลบหนี (เช่นการจัดการ, ในไฟล์ CSV แบบแยก) เท่าที่ฉันรู้ หากคุณต้องการการใช้ห้องสมุดจัดการ CSV โดยเฉพาะนั้นง่ายกว่า มีหลายภาษา
reinierpost

0

ใช้งาน 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()

}

0

ลอง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 หรือใหม่กว่า

ข้อดีบางประการ:

  • คุณได้รับการสนับสนุน CSV ไม่ใช่แค่ "สมมติว่าข้อมูลนั้นถูกต้อง"
  • คุณสามารถเข้าร่วมได้หลายปุ่ม
  • ง่ายต่อการใช้และทำความเข้าใจมากกว่าjoinโซลูชันที่ใช้
  • คุณสามารถรวมไฟล์ CSV ได้มากกว่า 2 ไฟล์
  • คุณสามารถเข้าร่วมด้วยนิพจน์ SQL - ค่าไม่จำเป็นต้องเหมือนกัน

คำเตือน:ฉันเขียนเครื่องมือนั้น มันเคยเป็นความไม่ลงรอยกันหลังจาก Google Code ถูกปิดลง แต่ฉันได้รับการฟื้นฟูและเพิ่มคุณสมบัติใหม่เมื่อฉันใช้งาน


0

คุณสามารถอ่านไฟล์ CSV ด้วยโปรแกรมสเปรดชีตเช่น LibreOffice และใช้VLOOKUP()มาโครเพื่อค้นหาชื่อในไฟล์ที่สอง


7
ไฟล์นามสกุล xlsx หมายถึง Microsoft Excel และฉันคิดว่า VLOOKUP ก็ทำได้เช่นกัน คำถามนี้ติดแท็กด้วย Linux Microsoft Excel พร้อมใช้งานสำหรับ Linux หรือไม่
Peter Mortensen

ตอนนี้ LibreOffice มีVLOOKUPด้วย
Cristian Ciupitu

-1

คุณสามารถใช้เครื่องมือที่ออกแบบมาสำหรับการเข้าร่วมไฟล์ csv เช่นที่พบในhttps://filerefinery.com

การดำเนินการที่เราสนับสนุนในปัจจุบันคือ: การเข้าร่วมไฟล์ csv เป็นไปได้ที่จะดำเนินการเทียบเท่า SQL ของการดำเนินการเข้าร่วมด้านนอกด้านในด้านซ้ายและด้านขวาในสองไฟล์ csv จะใช้คอลัมน์ใดเป็นคีย์เข้าร่วมในแต่ละไฟล์ซึ่งสามารถกำหนดค่าได้


โปรดอ้างอิงส่วนสำคัญของคำตอบจากลิงค์อ้างอิงเนื่องจากคำตอบอาจไม่ถูกต้องหากหน้าเชื่อมโยงมีการเปลี่ยนแปลง
DavidPostill

ไม่มีอยู่แล้ว.
Ondra Žižka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.