msort(1)बहु-रेखा रिकॉर्ड के साथ फ़ाइलों को सॉर्ट करने में सक्षम होने के लिए डिज़ाइन किया गया था। इसमें एक वैकल्पिक gui है, साथ ही एक सामान्य और प्रयोग करने योग्य मानव कमांड लाइन संस्करण भी है। (कम से कम, मनुष्य जो मैनुअल को ध्यान से पढ़ना और उदाहरण के लिए देखना पसंद करते हैं ...)
AFAICT, आप रिकॉर्ड के लिए एक मनमाना पैटर्न का उपयोग नहीं कर सकते हैं, इसलिए जब तक कि आपके रिकॉर्ड निश्चित आकार के नहीं होते (बाइट्स में, वर्ण या रेखाएं नहीं)। रिकॉर्ड के लिए msortएक -bविकल्प है जो रिक्त लाइनों द्वारा अलग की गई लाइनों के ब्लॉक हैं।
आप अपने इनपुट को एक प्रारूप में बदल सकते हैं, जो कि -bबहुत आसानी से काम करेगा , प्रत्येक के पहले एक रिक्त लाइन डालकर ###...(पहले एक को छोड़कर)।
डिफ़ॉल्ट रूप से, यह स्टैडर पर आंकड़ों को प्रिंट करता है, इसलिए कम से कम यह बताना आसान है कि यह कब सॉर्ट नहीं हुआ क्योंकि यह लगा कि पूरा इनपुट एकल रिकॉर्ड था।
msortआपके डेटा पर काम करता है। sedआदेश हर करने के लिए एक नई पंक्ति पहले जोड़ता #+लाइन 1. के अलावा लाइन -wप्रकार पूरे रिकॉर्ड (कोषगत)। एक कुंजी के रूप में उपयोग करने के लिए रिकॉर्ड के किस भाग को चुनने के लिए विकल्प हैं, लेकिन मुझे उनकी आवश्यकता नहीं थी।
मैंने एक्स्ट्रा न्यूलाइन्स को भी छोड़ दिया।
$ 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 '#'रिकॉर्ड विभाजक के रूप में उपयोग करने के लिए कोई भाग्य नहीं था । यह पूरी फाइल एक रिकॉर्ड था।