উত্তর:
কোর্টিলস 8.6 (2010-10-15) হিসাবে, জিএনইউ sort
ইতিমধ্যে যেখানে উপলব্ধ সেখানে বেশ কয়েকটি প্রসেসরের ব্যবহার করার জন্য সমান্তরালভাবে বাছাই করে। সুতরাং, এটি সম্পর্কিত pigz
বা pbzip2
উন্নতি করতে gzip
বা এর ক্ষেত্রে আরও উন্নতি করা যায় না bzip2
।
যদি আপনার sort
সমান্তরাল না হয়, আপনি জিএনইউ কোর্টিলসেরsort
সর্বশেষতম সংস্করণ থেকে জিএনইউ চেষ্টা করে ইনস্টল করতে পারেন ।
জিএনইউ সাজানোর সাহায্যে আপনি --parallel
বিকল্পের সাহায্যে থ্রেডের সংখ্যা সীমাবদ্ধ করতে পারেন ।
যদি আপনার ফাইলটি যথেষ্ট পরিমাণে বড় হয় তবে বাছাইয়ের ফলে ডিস্কের অদলবদল ঘটতে পারে, কারণ বরাদ্দ ভার্চুয়াল মেমরিটি খুব বেশি বেড়ে চলেছে বা sort
প্রোগ্রাম নিজেই ডিস্ক এবং পিছনে অংশগুলি অদলবদল করে। পুরানো sort
বাস্তবায়নগুলিতে এই "ডিস্ক বাফার মাধ্যমে বাছাই করুন" সাজানোর আচরণের সম্ভাবনা বেশি থাকে, কারণ পুরানো দিনগুলিতে বড় ফাইলগুলি সাজানোর একমাত্র উপায় ছিল।
sort
এখানে একটি -m
বিকল্প রয়েছে যা আপনাকে সহায়তা করতে পারে। ফাইলটিকে খণ্ডগুলিতে ভাগ করা আরও দ্রুত হতে পারে - এর সাথে বলুন split -l
- এগুলি স্বাধীনভাবে বাছাই করুন, তারপরে তাদের আবার একত্রিত করুন।
তারপরে আবার এটিও হতে পারে যে এটিই "ডিস্ক বাফার মাধ্যমে বাছাই করুন" যা করে। এটি সাহায্য করে কিনা তা খুঁজে বের করার একমাত্র উপায় হ'ল এটি আপনার নির্দিষ্ট পরীক্ষার লোডে বেঞ্চমার্ক করা। সমালোচনামূলক পরামিতিটি আপনার দেওয়া লাইন গণনা হবে split -l
।
split
এবং merge
এবং দেখুন এটি সাহায্য করে।
merge(1)
এখানে প্রয়োগযোগ্যতা রয়েছে। ব্যবহার sort -m
।
sort --merge
।
আমার ব্যবহার করে খুব উল্লেখযোগ্য লাভ হয়েছিল sort -n
, যার জন্য সমস্ত নির্বাচিত কলামগুলিতে বৈজ্ঞানিক স্বরলিপি ছাড়াই সংখ্যাগত মান (ভাসা বা পূর্ণসংখ্যার) প্রয়োজন।
আপনার প্রক্রিয়াতে দুর্দান্ত উন্নতি হতে পারে এমন আরেকটি সম্ভাবনা হ'ল /dev/shm
মধ্যস্থতাকারী ফাইলগুলি মোকাবেলায় মেমরি ম্যাপযুক্ত ফোল্ডারটি ব্যবহার করা।
export LC_COLLATE=C
export LANG=C
cat big_file | sort > /dev/null
ইউনিকোড সমতা নিয়ম মেনে চলার জন্য সাধারণত লিনাক্স সাজানোর কিছু নিফটি স্টাফ করে ... আপনি যদি লোকেলটি সি তে পরিবর্তন করেন তবে এটি কেবল বাইটে স্যুইচ করে ...
একটি 1.4 গিগাবাইট ফাইলের জন্য আমার মেশিনে পার্থক্যটি 20s বনাম 400 এর (!!!)
LC_ALL=C
যথেষ্ট হবে না?
LC_COLLATE
ইতিমধ্যে যথেষ্ট। আমি যতদূর জানি sort
ব্যবহারসমূহ strcoll
comparision এবং র manpage জন্য বলছেন আচরণের উপর নির্ভর করেLC_COLLATE
#! /bin/sh
#config MAX_LINES_PER_CHUNK based on file length
MAX_LINES_PER_CHUNK=1000
ORIGINAL_FILE=inputfile.txt
SORTED_FILE=outputfile.txt
CHUNK_FILE_PREFIX=$ORIGINAL_FILE.split.
SORTED_CHUNK_FILES=$CHUNK_FILE_PREFIX*.sorted
#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
rm -f $SORTED_FILE
#Splitting $ORIGINAL_FILE into chunks ...
split -l $MAX_LINES_PER_CHUNK $ORIGINAL_FILE $CHUNK_FILE_PREFIX
for file in $CHUNK_FILE_PREFIX*
do
sort -n -t , -k 1,1 $file > $file.sorted &
done
wait
#echo "**********SORTED CHUNK FILES*********"
#echo $SORTED_CHUNK_FILES
#Merging chunks to $SORTED_FILE ...
sort -mn $SORTED_CHUNK_FILES > $SORTED_FILE
#Cleanup any lefover files
rm -f $SORTED_CHUNK_FILES > /dev/null
rm -f $CHUNK_FILE_PREFIX* > /dev/null
ফাইলটি বিভক্ত এবং সাজানো এটি বাছাইয়ের গতি বাড়িয়ে তুলবে