मैं एक विशाल 4-कॉलम फ़ाइल का सामना कर रहा हूं। मैं इसके 3 कॉलम के आधार पर छंटनी में छँटनी की गई फ़ाइल दिखाना चाहता हूँ:
cat myFile | sort -u -k3
क्या यह चाल करने के लिए पर्याप्त है?
sort -u -k3 myFile
, यहां तक कि
मैं एक विशाल 4-कॉलम फ़ाइल का सामना कर रहा हूं। मैं इसके 3 कॉलम के आधार पर छंटनी में छँटनी की गई फ़ाइल दिखाना चाहता हूँ:
cat myFile | sort -u -k3
क्या यह चाल करने के लिए पर्याप्त है?
sort -u -k3 myFile
, यहां तक कि
जवाबों:
sort -k 3,3 myFile
कॉलम को मानने वाले 3 rd कॉलम द्वारा सॉर्ट की गई फ़ाइल को प्रदर्शित करेगा , जो वर्तमान लोकेल द्वारा परिभाषित क्रम के अनुसार, POSIX / C लोकेल में रिक्त स्थान (ASCII SPC और TAB वर्ण) के अनुक्रम द्वारा अलग की गई है।
ध्यान दें कि कॉलम में प्रमुख रिक्त स्थान शामिल किए गए हैं (डिफ़ॉल्ट विभाजक एक गैर-रिक्त से रिक्त स्थान के लिए संक्रमण है), जो उन स्थानों में अंतर कर सकता है जहां तुलना के उद्देश्य के लिए रिक्त स्थान की अनदेखी नहीं की जाती है, -b
उपेक्षा करने के लिए विकल्प का उपयोग करें अग्रणी खाली है।
ध्यान दें कि यह शेल से पूरी तरह से स्वतंत्र है (सभी शेल उस कमांड लाइन को पार्स करेंगे, शेल आमतौर पर sort
कमांड में निर्मित नहीं होते हैं )।
-k 3
3 आरडी कॉलम (अग्रणी रिक्त स्थान सहित) के साथ शुरू होने वाली लाइनों के हिस्से को सॉर्ट करना है । सी लोकेल में, क्योंकि सभी मुद्रण योग्य वर्णों से पहले स्थान और टैब वर्ण रैंक करते हैं, जो आम तौर पर आपको एक ही परिणाम देगा -k 3,3
(उन लाइनों को छोड़कर, जिनके पास एक समान तीसरा फ़ील्ड है),
-u
यदि उनमें से कोई एक ही है तो उसे पहचान के अनुसार बनाए रखना है (यानी जहां सॉर्ट कुंजी समान हो (यह जरूरी नहीं कि समान हो )।
cat
बिल्ली enate करने के लिए आदेश है । आपको इसकी आवश्यकता नहीं है।
यदि कॉलम किसी और चीज़ से अलग हो जाते हैं, तो आपको -t
विभाजक को निर्दिष्ट करने के लिए विकल्प की आवश्यकता होती है ।
दिया उदाहरण फ़ाइल a
$ cat a
a c c c
a b ca d
a b c e
a b c d
के साथ -u -k 3
:
$ echo $LANG
en_GB.UTF-8
$ sort -u -k 3 a
a b ca d
a c c c
a b c d
a b c e
लाइन 2 और 3 में एक ही तीसरा कॉलम है, लेकिन यहां सॉर्ट कुंजी तीसरे कॉलम से लाइन के अंत तक है, इसलिए -u
दोनों को बनाए रखता है। ␠ca␠d
इससे पहले ␠c␠c
कि मेरे लोकेल में पहले पास में स्थानों को नजरअंदाज किया जाता है, पहले cad
सॉर्ट करें cc
।
$ sort -u -k 3,3 a
a b c d
a b c e
a b ca d
केवल उन लोगों के लिए जिन्हें 3 कॉलम है, के ऊपर रखा गया है ␠c
। ध्यान दें कि एक ␠␠c
(2 प्रमुख रिक्त स्थान) के साथ कैसे बनाए रखा जाता है।
$ sort -k 3 a
a b ca d
a c c c
a b c d
a b c e
$ sort -k 3,3 a
a b c d
a c c c
a b c e
a b ca d
देखें कैसे के आदेश a b c d
और a c c c
उलट कर रहे हैं। पहले मामले में, क्योंकि ␠c␠c
पहले की तरह ␠c␠d
, दूसरे मामले में क्योंकि सॉर्ट कुंजी एक समान है ( ␠c
), अंतिम रिज़ॉर्ट तुलना जो पूर्ण पुट के a b c d
पहले की तुलना करती है a c c c
।
$ sort -b -k 3,3 a
a b c d
a b c e
a c c c
a b ca d
एक बार जब हम रिक्त स्थान को अनदेखा कर देते हैं, तो पहली 3 पंक्तियों के लिए सॉर्ट कुंजी समान होती है ( c
), इसलिए वे अंतिम रिज़ॉर्ट तुलना द्वारा सॉर्ट किए जाते हैं।
$ LC_ALL=C sort -k 3 a
a b c e
a c c c
a b c d
a b ca d
$ LC_ALL=C sort -k 3,3 a
a b c e
a b c d
a c c c
a b ca d
सी लोकेल में, ␠␠c
पहले की तरह सॉर्ट करें ␠c
जहां केवल एक पास है जहां वर्ण (तब सिंगल बाइट्स) अपने कोड बिंदु मूल्य (जहां स्थान की तुलना में कम कोड बिंदु है c
) के आधार पर सॉर्ट करता है ।
blank
-separated हैं जिसमें स्थान के आधार पर स्थान और टैब के अतिरिक्त अन्य वर्ण शामिल हो सकते हैं।
3,3
करता है? सिर्फ क्यों नहीं 3
?
यदि आप "कॉलम" को पाठ फ़ाइल (4 वें वर्ण) के रूप में समझते हैं, तो हाँ, आपके समाधान को काम करना चाहिए (या रैंडम एक्सेस के साथ कुछ मेमोरी-सेविंग मैजिक्स sort -u -k3 myFile
को अनुमति देने के sort
लिए भी )। यदि आप डेटाबेस में "कॉलम" को समझते हैं - एक विभाजक, और चर स्तंभ चौड़ाई के बाद डेटा की एक पूरी इकाई, तो आपको कुछ कट्टरता की आवश्यकता होगी जैसे इस प्रकार ls -l आकार द्वारा
ls -l |awk '{print $5 " " $0;}'| sort -n | cut -d " " -f 2-
(जो तुच्छ के बराबर है ls -lS
लेकिन अच्छी तरह से उदाहरण प्रस्तुत करता है।)
sort -k 1.3,1.3
:। ls -l | sort -k5,5n
आकार पर सॉर्ट करने के लिए।
awk
समाधान वास्तव में क्या मैं आसानी से जटिल सॉर्टिंग आवश्यकताओं फिट करने के लिए संशोधित needed-- है
sort -g -k column_number
विशिष्ट कॉलम का उपयोग करके किसी भी सूची को सांख्यिक वर्णों को क्रमबद्ध करने का सही आदेश है
आप awk वेलोर लाइब्रेरी का उपयोग कर सकते हैं :
#!/usr/local/bin/velour -f
{
q[NR] = $3
z[NR] = $0
}
END {
a_sort_by(q, z)
io_puts(q)
}
$ sort -k 1.3,1.3 myfile
यदि आपकी फ़ाइल में कोई विभाजक नहीं है, तो अपनी कॉलम फाइल को तीसरे कॉलम पर सॉर्ट करें।
$ cat myfile
ax5aa
aa3ya
fg7ds
pp0dd
aa1bb
$ sort -k 1.3,1.3 myfile
pp0dd
aa1bb
aa3ya
ax5aa
fg7ds
मैन पेज ऑफ़ सॉर्ट:
[...] -k, --key = POS1 [, POS2] POS1 (मूल 1) पर एक कुंजी शुरू करें, इसे POS2 (पंक्ति का डिफ़ॉल्ट अंत) [...] POS F [.C] पर समाप्त करें। ओपीटीएस], जहां एफ क्षेत्र संख्या और सी क्षेत्र में चरित्र की स्थिति है; दोनों मूल हैं 1. यदि न तो-न तो -बी प्रभाव में है, तो एक क्षेत्र में वर्ण पूर्ववर्ती व्हाट्सएप की शुरुआत से गिने जाते हैं। ओपीटीएस एक या एक से अधिक अक्षरों का आदेश देने वाला विकल्प है, जो उस कुंजी के लिए वैश्विक ऑर्डरिंग विकल्पों को ओवरराइड करता है। यदि कोई कुंजी नहीं दी गई है, तो कुंजी के रूप में पूरी पंक्ति का उपयोग करें।
--Key = 1.3,1.3 के साथ, आपने कहा कि केवल एक फ़ील्ड (संपूर्ण पंक्ति) है और आप इस फ़ील्ड की तीसरी वर्ण स्थिति की तुलना कर रहे हैं।
sort -u -k3 < myFile
।