awk - Speed the process of matching two columns using python -


अगर मेरे पास FILE1 समान है:

  1 56903 1 293943 1 320022 2 24050 2 404999 2 1003093  

और ऐसा FILE2:

  1 rs40209 56903 1 rs209485 79382 1 rs392392 320022 2 rs30302 504922 2 rs3202309 707899 2 rs39339 1003093  

और मैं दूसरे कॉलम को खींचना चाहता हूं कि FILE1 के साथ FILE1 मैच का पहला और दूसरा, मैं एक नेस्टेड लूप का उपयोग FILE1 इस awk कमांड के माध्यम से पढ़ सकता हूँ:

  जबकि COL1 COL2 पढ़ा; क्या करें- V COL1 = $ COL1 -v COL2 = $ COL2 '($ 1 == COL1 और amp; $ 3 == COL2) {प्रिंट $ 2}' $ FILE2 किया & lt; "$ FILE1"  

आउटपुट के रूप में

<पूर्व> rs40209 rs392392 rs39339

वापस आएगा।

< P> हालांकि, यह करने के लिए नेस्टेड लूप का उपयोग बहुत धीमा है।

अधिकांश डेटा सॉर्ट किए जाते हैं, लेकिन सभी नहीं, और मैं सॉर्ट नहीं कर सकता क्योंकि अन्य फाइल इन फाइलों पर मौजूदा ऑर्डर में निर्भर करती है।

अजगर का उपयोग, FILE1 के लिए ~ 2 एम प्रविष्टियों और FILE2 के साथ ~ 1 एम प्रविष्टियों के साथ यह करने का एक बहुत तेज़ तरीका क्या होगा?

पायथन में आप सेट में 1 फ़ाइल की सामग्री पढ़ेंगे। सेट को एक हैश तालिका द्वारा समर्थित किया जाता है जो औसत O (1) (निरंतर-समय) लुकअप:

  खोलने वाला ('FILE1 ') फ़ाइल के रूप में: file1_contents = {फ़ाइल में पंक्ति के लिए} टुपे (लाइन.split ())}  

फिर दूसरी फ़ाइल को फ़िल्टर करें:

  खोलने के साथ ('FILE2') फ़ाइल 2 के रूप में: file2: c1, c2, c3 = line.split () में अगर फ़ाइल 1_contents: print (c2) में (c1, c3)  

के साथ के लिए FILE1 और FILE2 प्रश्न के रूप में सामग्री वाले, आउटपुट में परिणाम

  rs40209 rs392392 rs39339  

2 मिलियन प्रविष्टियों के साथ, सेट में थोड़ी मात्रा में राम (लगभग 1 गीगाबाइट) का उपभोग होगा, लेकिन इसमें सबसे ज्यादा असीमपटाटिक समय जटिलता होगी FILE1 में 2 मिलियन प्रविष्टियों और FILE2 में 1 मिलियन के लिए कुल समय मेरे लैपटॉप पर 5 सेकंड था। यह फैब्रिकेटर की एडब्ल्यूके स्क्रिप्ट की तुलना में ~ 4 गुना तेज है:

 % time awk -f script.awk FILE2 & gt; / Dev / null awk -f script.awk FILE2 & gt; / Dev / null 17.47s उपयोगकर्ता 0.14 s सिस्टम 99% cpu 17.606 कुल% समय अजगर filter.py & gt; / Dev / null पायथन filter.py & gt; / Dev / null 4.32s उपयोगकर्ता 0.20s सिस्टम 99% सीपीयू 4.526 कुल  

Comments

Popular posts from this blog

java - org.apache.http.ProtocolException: Target host is not specified -

java - Gradle dependencies: compile project by relative path -

ruby on rails - Object doesn't support #inspect when used with .include -