উত্তর:
কোর্টিলস 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ব্যবহারসমূহ strcollcomparision এবং র 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
ফাইলটি বিভক্ত এবং সাজানো এটি বাছাইয়ের গতি বাড়িয়ে তুলবে