2012-02-12 16 views
102

में फ़ाइल से यादृच्छिक रेखाएं चुनें, मैं इनपुट फ़ाइल से आउटपुट और आउटपुट से अन्य यादृच्छिक रेखाएं चुनना चाहता हूं। यह कैसे किया जा सकता है?बैश स्क्रिप्ट में

+0

क्रमबद्ध फ़ाइल और एन लेने पहली पंक्तियां –

+0

यह भी देखें http://stackoverflow.com/questions/12354659/how-to-select-random-lines-from-a-file। –

+8

यह एक डुप्लिकेट नहीं है - वह एन लाइन बनाम 1 लाइन चाहता है। – OneSolitaryNoob

उत्तर

134

क्रमबद्ध फ़ाइल बेतरतीब ढंग से और लेने के लिए पहले 100 लाइनों:

$ sort -R input | head -n 100 >output 
+38

'सॉर्ट' वास्तव में एक साथ समान रेखाएं समान रूप से टाइप करता है, इसलिए यदि आपके पास डुप्लिकेट लाइनें हो सकती हैं और आप 'shuf' (एक gnu उपकरण) स्थापित है, इसके लिए इसका उपयोग करना बेहतर है। – Kevin

+18

अंडलसो, यह निश्चित रूप से आपको ** ** बहुत इंतजार करने जा रहा है यदि आपके पास काफी बड़ी फ़ाइल है - 80 कि.मी. लाइनें - जबकि, 'shuf -n' तत्काल कार्य करता है। – Rubens

+26

सॉर्ट -आर मैक ओएस एक्स (10.9) – tfb785

316

-n विकल्प के साथ उपयोग shuf नीचे दिखाया गया है, N यादृच्छिक लाइनों प्राप्त करने के लिए के रूप में: बेतरतीब ढंग से

shuf -n N input > output 
+26

यह स्वीकार्य उत्तर होना चाहिए। वाह, शफ बहुत तेज़ है। - 40000 लाइनों के साथ एक टेक्स्टफाइल से 10000 यादृच्छिक रेखाएं चुनना तत्काल है।'Sort -R' का उपयोग करने की कोशिश करने में इतनी देर लग गई कि मैं केवल CTRL-C इसे – carpii

+1

यदि आपको केवल यादृच्छिक क्रम में नहीं, तो यादृच्छिक क्रम में नहीं, तो शफ बहुत अक्षम है (बड़ी फ़ाइल के लिए): जलाशय करना बेहतर है नमूनाकरण, जैसा कि [इस उत्तर] में है (https://stackoverflow.com/a/692401/933228)। – petrelharp

+3

न तो shuf और sort -R मैक ओएसएक्स के लिए उपलब्ध हैं। कोई सुझाव? –

संबंधित मुद्दे