यहाँ कुछ "शुद्ध" awk
समाधान हैं:
यदि अनुक्रमणिका हमेशा समान वृद्धिशील पूर्णांक अनुक्रम (6115-6119) है, जैसा कि आपके नमूना-डेटा में है, तो आप एक एल्गोरिथम "शॉर्टकट" का उपयोग कर सकते हैं:
awk '{a[$1]=$0} !(NR%4){for(i=6115;i<6119;print a[i++]);}'
यह करता है
- सरणी में सभी पंक्तियों को जोड़ें
a
, सूचकांक पदों पर वितरित 6115-6119
!(NR%4)
वांछित क्रम में मुद्रित करने के लिए सरणी सामग्री के माध्यम से प्रत्येक 4 वीं पंक्ति ( ) पर लूप।
यदि आपके संख्यात्मक सूचकांक हमेशा चार समान होते हैं, लेकिन पूर्णांक अनुक्रम नहीं बढ़ रहा है, तो आपको क्रमबद्ध करना होगा:
awk '{a[$1]=$0} !(NR%4){asort(a,b); for(i=1;i<5;print b[i++]);}'
नोट: यह GNU awk के साथ है, अन्य समर्थन नहीं कर सकते हैं asort
।
यदि हर ब्लॉक के चार अलग-अलग संख्यात्मक आईडी हो सकते हैं:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;print a[i++]); delete a}'
नोट: @ गिल्स से सेल्फ-आंसर (+2) का यह उपयोग delete
POSIX का (अभी तक) नहीं है, लेकिन सार्वभौमिक रूप से समर्थित है ।
सही ™ उपयोग के साथ एक संस्करण delete
:
awk '{a[$1]=$0} !(NR%4){asort(a); for(i=1;i<5;delete a[i++]){print a[i]}}'
अधिक मेमोरी और आयामों का उपयोग किए बिना, बिना डिलीट किए एक संस्करण:
awk '{a[n][$1]=$0} !(NR%4){asort(a[n]); for(i=1;i<5;print a[n][i++]); n++}