बड़ी टेक्स्ट फ़ाइल में बेतरतीब ढंग से पंक्तियों को फेरना


11

मेरे पास लगभग 6k पंक्तियों के साथ ~ 1GB की एक पाठ फ़ाइल है (प्रत्येक पंक्ति बहुत लंबी है) और मुझे इसकी पंक्तियों को बेतरतीब ढंग से फेरबदल करने की आवश्यकता है। क्या यह संभव है? संभवतः जाग के साथ?

जवाबों:


19

आप GNU कोरुटिल्सshuf से कमांड का उपयोग कर सकते हैं । उपयोगिता बहुत तेज है और 1 जीबी फ़ाइल को फेरबदल करने में एक मिनट से भी कम समय लगेगा।

नीचे दी गई कमांड सिर्फ आपके मामले में काम कर सकती है क्योंकि shufआउटपुट फ़ाइल खोलने से पहले पूरा इनपुट पढ़ेंगे:

$ shuf -o File.txt < File.txt

धन्यवाद, मैं ओएसएक्स पर उल्लेख करना भूल गया, कोई समकक्ष?
dddichael

6
@ddmichael रन brew install coreutilsऔर उपयोग करें /usr/local/bin/gshuf
Lri

2
वैकल्पिक रूप से OS X के लिए आप इस पर्ल एक लाइनर का उपयोग कर सकते हैं। यह पुराने ब्लॉगों में से एक है। एक त्वरित परीक्षण किया और काम करते हुए पाया। cat myfile | perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' मुझे यकीन है कि हालांकि यह कितनी तेजी से चलेगा
सूरज बियानी

4

पायथन वन-लाइनर:

python -c 'import sys, random; L = sys.stdin.readlines(); random.shuffle(L); print "".join(L),'

मानक इनपुट से सभी पंक्तियों को पढ़ता है, उन्हें इन-प्लेस में फेरबदल करता है, फिर उन्हें एक समाप्त होने वाली नई पंक्ति ( ,अंत से नोटिस ) को जोड़े बिना प्रिंट करता है ।


2

OSX के लिए बाइनरी कहा जाता है gshuf

brew install coreutils
gshuf -o File.txt < File.txt

1

अगर मेरी तरह तुम यहाँ shufmacOS के लिए एक वैकल्पिक के लिए देखने के लिए आया था तो उपयोग करें randomize-lines

स्थापित करें randomize-lines(होमब्रे) पैकेज, जिसमें एक rlकमांड है जिसकी कार्यक्षमता समान है shuf

brew install randomize-lines

Usage: rl [OPTION]... [FILE]...
Randomize the lines of a file (or stdin).

  -c, --count=N  select N lines from the file
  -r, --reselect lines may be selected multiple times
  -o, --output=FILE
                 send output to file
  -d, --delimiter=DELIM
                 specify line delimiter (one character)
  -0, --null     set line delimiter to null character
                 (useful with find -print0)
  -n, --line-number
                 print line number with output lines
  -q, --quiet, --silent
                 do not output any errors or warnings
  -h, --help     display this help and exit
  -V, --version  output version information and exit

0

मैं भूल गया कि मुझे यह कहां मिला है, लेकिन यहां shuffle.plमैं इसका उपयोग करता हूं:

#!/usr/bin/perl -w

# @(#) randomize Effectively _unsort_ a text file into random order.
# 96.02.26 / drl.
# Based on Programming Perl, p 245, "Selecting random element ..."

# Set the random seed, PP, p 188
srand(time|$$);

# Suck in everything in the file.
@a = <>;

# Get random lines, write 'em out, mark 'em done.
while ( @a ) {
        $choice = splice(@a, rand @a, 1);
        print $choice;
}

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.