একটি বৃহত পাঠ্য ফাইলে এলোমেলোভাবে সারি সজ্জিত করুন


10

আমার প্রায় k কে সারি সহ GB 1 গিগাবাইটের একটি পাঠ্য ফাইল রয়েছে (প্রতিটি সারি খুব দীর্ঘ) এবং এলোমেলোভাবে এর সারিগুলি পরিবর্তন করতে হবে। এটা কি সম্ভব? সম্ভবত বিশ্রী সাথে?

উত্তর:


18

আপনি জিএনইউ কোর্টিলshuf থেকে কমান্ডটি ব্যবহার করতে পারেন । ইউটিলিটিটি খুব দ্রুত এবং 1 জিবি ফাইল বদল করতে এক মিনিটেরও কম সময় লাগবে।

নীচের কমান্ডটি কেবল আপনার ক্ষেত্রে কাজ shufকরবে কারণ আউটপুট ফাইলটি খোলার আগে সম্পূর্ণ ইনপুটটি পড়বে:

$ shuf -o File.txt < File.txt

ধন্যবাদ, আমি ওএসএক্স, কোন সমপরিমাণের কথা বলতে ভুলে গেছি?
ডিডিমাইকেল

4
@ddmichael চালান brew install coreutilsএবং ব্যবহার করুন /usr/local/bin/gshuf
Lri

2
@ddmichael বিকল্পভাবে ওএস এক্স এর জন্য আপনি এই পার্ল ওয়ান লাইনার ব্যবহার করতে পারেন। এটি পুরানো ব্লগগুলির মধ্যে একটি পেয়েছে। একটি দ্রুত পরীক্ষা করেছেন এবং কাজ খুঁজে পেয়েছেন। 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),'

স্ট্যান্ডার্ড ইনপুট থেকে সমস্ত লাইন পড়ে, এগুলিকে জায়গায় স্থানান্তরিত করে, তারপরে একটি শেষ নিউলাইন যোগ না করে মুদ্রণ করে ( ,শেষ থেকে লক্ষ্য করুন )।


1

আমার মতো যদি আপনি এখানে shufম্যাকোসের বিকল্পের সন্ধান করতে এসেছিলেন তবে ব্যবহার করুন 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

1

ওএসএক্সের জন্য বাইনারি বলা হয় gshuf

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

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;
}

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.