मुझे एक बड़ी वर्डलिस्ट को कम करने की आवश्यकता है। मैंने कई आदेशों की कोशिश की और सबसे तेजी से `अनइक` टूल में लिनक्स में कुछ शोध किया और एक बड़े मल्टी-जीबी टेक्स्टफाइल में डुप्लिकेट लाइनों को कैसे हटाया जाए? जहां वे समझाते हैं कि किसी शब्दसूची को काट देने का सबसे तेज़ तरीका उपयोग करना प्रतीत होता है awk
।
awk --> O(n) ? sort --> O(n log n) ?
हालाँकि, मैंने पाया कि यह सच नहीं है। यहाँ मेरे परीक्षण के परिणाम हैं:
time sort -u input.txt -o output.txt
real 0m12.446s
user 0m11.347s
sys 0m0.906s**
time awk '!x[$0]++' input.txt > output.txt
real 0m47.221s
user 0m45.419s
sys 0m1.260s
इसलिए उपयोग sort -u
3.7 गुना तेज है। ऐसा क्यों है? क्या समर्पण करने के लिए और भी तेज़ तरीका है?
*********** अपडेट करें ********
जैसा कि किसी ने टिप्पणियों में बताया है, यह हो सकता है कि मेरी वर्डलिस्ट पहले से ही कुछ हद तक हल हो गई थी। इस संभावना को बाहर करने के लिए मैंने random_number_wordlist_generator.py का उपयोग करके दो वर्डलिस्ट बनाए ।
List1 = 7 Mb
List2 = 690 Mb
**Results AWK:**
***List1***
real 0m1.643s
user 0m1.565s
sys 0m0.062s
***List2***
real 2m6.918s
user 2m4.499s
sys 0m1.345s
**Results SORT:**
***List1***
real 0m0.724s
user 0m0.666s
sys 0m0.048s
***List2***
real 1m27.254s
user 1m25.013s
sys 0m1.251s