मैं मध्यम आकार (लगभग 10M-100M लाइनों) टैब से अलग कॉलम टेक्स्ट फ़ाइलों के साथ काम करने के लिए अपने यूनिक्स शेल में बहुत सारे grep awk सॉर्ट का उपयोग करता हूं। इस संबंध में यूनिक्स खोल मेरी स्प्रेडशीट है।
लेकिन मुझे एक बहुत बड़ी समस्या है, वह यह है कि आईडी की सूची में दिए गए रिकॉर्ड का चयन करना।
आईडी की सूची के table.csv
साथ प्रारूप id\tfoo\tbar...
और ids.csv
फ़ाइल के साथ फाइल करने के बाद , केवल table.csv
उपस्थित आईडी से रिकॉर्ड का चयन करें ids.csv
।
तरह की /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids लेकिन शेल के साथ, पर्ल नहीं।
grep -F
स्पष्ट रूप से गलत पॉजिटिव उत्पन्न करता है यदि आईडी परिवर्तनशील चौड़ाई हैं।
join
एक उपयोगिता है जिसका मैं कभी पता नहीं लगा सका। सबसे पहले, इसे अल्फाबेटिक सॉर्टिंग की आवश्यकता होती है (मेरी फाइलें आमतौर पर संख्यात्मक रूप से सॉर्ट की जाती हैं), लेकिन फिर भी मैं गलत ऑर्डर के बारे में शिकायत किए बिना और कुछ रिकॉर्डों को स्किप करने के बिना इसे प्राप्त नहीं कर सकता। इसलिए मुझे यह पसंद नहीं है। gsp -f फाइल के साथ ^id\t
-s बहुत धीमी है जब आईडी की संख्या बड़ी है।
awk
बोझिल है।
क्या इसके लिए कोई अच्छा उपाय हैं? टैब-अलग फ़ाइलों के लिए कोई विशिष्ट उपकरण? अतिरिक्त कार्यक्षमता का भी बहुत स्वागत होगा।
UPD: सही किया गया sort
->join
awk
।
sort
सभी प्रकार की छंटनी, संख्यात्मक, वर्णमाला और अन्य कर सकते हैं। देखते हैं man sort
।
grep -f
बहुत धीमा है, तो इस रणनीति को बनाए रखने से अधिक परेशानी की तरह लगता है कि यह मूल्य है - भिन्नताएं संभवतः उसी ओ (एन * एम) प्रदर्शन के मुद्दों का शिकार होंगी। शायद आपका समय बेहतर तरीके से सीखने में व्यतीत होगा कि कैसे एक सामान्यीकृत SQL DB का उपयोग किया जाए ...