मैं मध्यम आकार (लगभग 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 का उपयोग किया जाए ...