msort(1)
মাল্টি-লাইন রেকর্ডের সাথে ফাইলগুলি বাছাই করতে সক্ষম হওয়ার জন্য ডিজাইন করা হয়েছিল। এটিতে একটি alচ্ছিক গুই রয়েছে, পাশাপাশি একটি সাধারণ এবং ব্যবহারযোগ্য মানুষের জন্য কমান্ড লাইন সংস্করণ রয়েছে। (কমপক্ষে, যে সমস্ত মানুষ ম্যানুয়াল সাবধানে পড়তে এবং উদাহরণগুলি সন্ধান করতে পছন্দ করে ...)
আফিকা, আপনি রেকর্ডগুলির জন্য একটি স্বেচ্ছাসেবী প্যাটার্ন ব্যবহার করতে পারবেন না, সুতরাং যদি না আপনার রেকর্ডগুলি নির্দিষ্ট আকারের হয় (বাইটগুলিতে, অক্ষর বা লাইন নয়)। রেকর্ডগুলির জন্য msort
একটি -b
বিকল্প রয়েছে যা ফাঁকা রেখার দ্বারা পৃথক করা লাইনের ব্লক।
আপনি নিজের ইনপুটটিকে এমন বিন্যাসে রূপান্তর করতে পারেন যা -b
খুব সহজেই কাজ করবে প্রত্যেকের আগে একটি ফাঁকা রেখা রেখে ###...
(প্রথমটি বাদে)।
ডিফল্টরূপে, এটি স্ট্যাডারের উপর পরিসংখ্যান মুদ্রণ করে, তাই কমপক্ষে এটি কখন সারণ করা হয় তা বলা সহজ কারণ এটি ভেবেছিল পুরো ইনপুটটি একক রেকর্ড।
msort
আপনার তথ্য কাজ করে। sed
কমান্ড প্রত্যেক করার একটি newline prepends #+
লাইন 1. ছাড়া লাইন -w
প্রকারের পুরো রেকর্ড (lexicographically)। কী হিসাবে রেকর্ডের কোন অংশটি ব্যবহার করা যায় তা বেছে নেওয়ার বিকল্প রয়েছে, তবে আমার সেগুলির দরকার নেই।
আমি অতিরিক্ত নিউলাইনগুলি সরিয়েও রেখেছি।
$ sed '2,$ s/^#\+/\n&/' unsorted.records | msort -b -w 2>/dev/null
####################################
KEY1
VAL11
VAL12
VAL13
VAL14
####################################
KEY2
VAL21
VAL22
VAL23
VAL24
####################################
KEY3
VAL31
VAL32
VAL33
VAL34
-r '#'
রেকর্ড বিভাজক হিসাবে এটি ব্যবহার করার জন্য আমার কোনও ভাগ্য হয়নি । এটি ভেবেছিল পুরো ফাইলটি একটি রেকর্ড।