दो सीएसवी फाइलें कैसे जुड़ें?


22

मान लीजिए कि आपके पास 2 फ़ील्ड: ID और ईमेल के साथ एक CSV फ़ाइल है। आपके पास 2 फ़ील्ड्स के साथ एक और फ़ाइल है: ईमेल और नाम। आप ईमेल पर शामिल हुए तीनों क्षेत्रों की फ़ाइल कैसे बना सकते हैं?


5
जुड़ने पर थोड़ा और विस्तार (यानी, आंतरिक, बाहरी, बाएं)। 1 सीएसवी पर ईमेल सूची दूसरी सूची के समान है? या एक अधिक शामिल है?
hyperslug

सीएसवी फ़ाइलों के उदाहरण आपके द्वारा उपयोग किए जा रहे ओएस के साथ-साथ काम करना होगा?
Troggy

मुझे लगता है कि पहली और दूसरी सूची समान हैं। मैं लिनक्स का उपयोग कर रहा हूं। कृपया सहायता कीजिए!!! धन्यवाद!! :)
crst53

1
डेटा कितना बड़ा है?
जोशुआ

जवाबों:


24

संशोधन 3 :

आपको ईमेल पर दोनों सूचियों को वर्णानुक्रम में सॉर्ट करना होगा, फिर सम्मिलित हों। यह देखते हुए कि ईमेल फ़ाइल 1 के 2 क्षेत्र और फ़ाइल 2 के 1 क्षेत्र को देखता है:

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 2: फ़ाइल 1, 2 क्षेत्र
-2 1: फ़ाइल 2, 1 फ़ील्ड
>: फाइल करने के लिए आउटपुट

पैदा करता है

ईमेल, आईडी, नाम
ईमेल, आईडी, नाम
...

वर्णानुक्रम में ईमेल द्वारा क्रमबद्ध किया गया।

ध्यान दें कि यदि कोई भी ईमेल या तो फ़ाइल से गायब है तो उसे परिणामों से हटा दिया जाएगा।


2
CSV इससे अधिक जटिल है। उदाहरण के लिए क्षेत्र विभाजक से बचा जा सकता है।
पगडियारियो

@ जिप्सलगग क्या मैं पूर्ण बाहरी जुड़ सकता हूं?
अबू शोएब

अगर ID में अल्पविराम शामिल है तो CSV मिश्रित / अनकोटेड मिश्रित है, तो यह काम नहीं करेगा। इस समाधान का उपयोग केवल एक बार के प्रसंस्करण के लिए करें जहां आप परिणाम की जांच करते हैं। लेकिन मैं इसे उत्पादन-स्तर की स्क्रिप्ट के लिए उपयोग नहीं करने की सलाह देता हूं।
ओन्द्रा žižka

25

Csvkit का उपयोग करें :

csvjoin -c email id_email.csv email_name.csv

या

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

4
यह शीर्ष उत्तर क्यों नहीं है?
एलेक्स

भयानक उपकरण। यहां तक ​​कि मान्यता है, कि मेरी एक फाइल "," सीमांकक से भिन्न है।
D_K

6

शायद यह ओवरकिल है, लेकिन आप एक डेटाबेस (जैसे ओपनऑफिस बेस) को दो प्रकार की तालिकाओं में आयात कर सकते हैं और एक रिपोर्ट को परिभाषित कर सकते हैं जो वांछित आउटपुट है।

यदि CSV आयात एक समस्या है, तो एक स्प्रेडशीट प्रोग्राम (जैसे OpenOffice Calc) आयात कर सकता है। फिर परिणाम आसानी से डेटाबेस में स्थानांतरित किया जा सकता है।


4

भविष्य के संदर्भ के रूप में आप AWK के साथ खेलना शुरू कर सकते हैं । यह एक बहुत ही सरल छोटी स्क्रिप्टिंग भाषा है जो हर * निक्स प्रणाली पर किसी न किसी रूप में मौजूद है और इसका एकमात्र मिशन जीवन है मानक सीमांकित पाठ डेटाबेस का हेरफेर है। थकाऊ स्क्रिप्ट की कुछ पंक्तियों के साथ आप कुछ बहुत उपयोगी चीजें कर सकते हैं। भाषा छोटी और सुरुचिपूर्ण है और किसी भी अन्य चीज़ से बेहतर उपयोगिता / जटिलता अनुपात है जिससे मैं अवगत हूं।


पर्ल कई मायनों में अवेक का उत्तराधिकारी है।
रीयरियरपोस्ट

awk, जहाँ तक मुझे पता है, उद्धृत करना और बचना (जैसे, in -separated CSV फ़ाइल के साथ व्यवहार करना) नहीं है। यदि आपको इसकी आवश्यकता है, तो एक समर्पित CSV हैंडलिंग लाइब्रेरी का उपयोग करना आसान है; वे कई भाषाओं के लिए मौजूद हैं।
रीयरियरपोस्ट

0

गो का उपयोग करें: 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 क्रंचर आज़माएं ।

यह 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)"

उपकरण को जावा 8 या बाद के संस्करण की आवश्यकता है।

कुछ फायदे:

  • आपको वास्तव में CSV का समर्थन मिलता है, न कि "मान लें कि डेटा सही है"।
  • आप कई कुंजियों पर जुड़ सकते हैं।
  • उपयोग किए गए joinसमाधानों की तुलना में उपयोग करने और समझने में आसान है ।
  • आप 2 से अधिक CSV फ़ाइलों को जोड़ सकते हैं।
  • आप एसक्यूएल एक्सप्रेशन द्वारा जुड़ सकते हैं - मानों का एक ही होना जरूरी नहीं है।

डिस्क्लेमर: मैंने वह टूल लिखा है। Google कोड बंद होने के बाद यह अव्यवस्थित हुआ करता था, लेकिन मैंने इसे पुनर्जीवित किया और जैसे ही मैंने इसका उपयोग किया, नई सुविधाएँ जोड़ीं।


0

आप LibreOffice जैसे स्प्रेडशीट प्रोग्राम के साथ CSV फ़ाइल को पढ़ सकते हैं और VLOOKUP()दूसरी फ़ाइल में नाम खोजने के लिए मैक्रो का उपयोग कर सकते हैं।


7
फ़ाइल एक्सटेंशन xlsx का मतलब Microsoft Excel है और मुझे लगता है कि VLOOKUP भी ऐसा करता है। यह प्रश्न लिनक्स के साथ टैग किया गया है। क्या Microsoft Excel लिनक्स के लिए उपलब्ध है?
पीटर मोर्टेंसन

अब लिबरऑफिस के पास VLOOKUP भी है।
क्रिस्टियन सियुपिटु

-1

आप विशेष रूप से csv फ़ाइलों में शामिल होने के लिए डिज़ाइन किए गए टूल का भी उपयोग कर सकते हैं, जैसे कि https://filerefinery.com पर पाया गया

वर्तमान में हम जिन कार्यों का समर्थन करते हैं, वे हैं: सीएसवी फाइलें जोड़ना। बाहरी, आंतरिक, बाएँ और दाएँ दो SQL फ़ाइलों पर शामिल होने के लिए SQL समतुल्य प्रदर्शन करना संभव है। प्रत्येक फाइल में कौन सी कॉलम जॉइन की जाती है यह कंफर्टेबल है।


कृपया संदर्भ लिंक (एस) से उत्तर के आवश्यक हिस्सों को उद्धृत करें, क्योंकि लिंक लिंक किए गए पृष्ठ (परिवर्तन) होने पर उत्तर अमान्य हो सकता है।
DavidPostill

अब मौजूद नहीं है।
ओंद्रा kaižka
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.