2012-11-27 9 views
5

के साथ लाइन आउटपुट मेरा प्रश्न this one जैसा है लेकिन एक अंतर के साथ; मैं उस लाइन को आउटपुट चाहता हूं जिसमें तीसरे टैब पर उच्चतम स्कोर है। अपने डेटा की तरह है:बैश उच्चतम मूल्य

1.gui Qxx 16 
2.gui Qxy 23 
3.guT QWS 11 

और मैं इस प्राप्त करना चाहते हैं:

1.gui Qxy 23 
3.guT QWS 11 

मैं प्रयोग किया है:

cat file.f | uniq | cut -d" " -f3 | sort | uniq -d >>out.f 

लेकिन मैं क्या चाहते हैं नहीं मिला !?

+0

क्या आप इनपुट और आउटपुट को फिर से जांच सकते हैं? आउटपुट में '1.गुई ...' होना चाहिए '2.गुई ...'? –

+0

@ Raze2dust पहले टैब के लिए संख्याएं महत्वपूर्ण नहीं हैं; वे सिर्फ लाइन नंबर represnt करने के लिए .. – teutara

+0

के .. तो आप आउटपुट में '3.guT' से' 2.guT' बदलना चाहिए। यह अन्यथा भ्रमित है। –

उत्तर

4
sort साथ

:

$ sort -rk3 file    # Sort on column 3, display all results 

2.gui Qxy 23 
1.gui Qxx 16 
3.guT QWS 11 

$ sort -rk3 file | head -2 # Sort on column 3, filter number of results 

2.gui Qxy 23 
1.gui Qxx 16 

$ sort -rk3 file | uniq  # Sort on column 3, on display unique results 

2.gui Qxy 23 
1.gui Qxx 16 
3.guT QWS 11 

-r क्रम उल्टा करें, उच्चतम पहले।

-k3 तीसरे कॉलम पर क्रमबद्ध करें।


आप केवल लाइन जो 3 स्तंभ कुछ मूल्य से अधिक होता है प्रदर्शित करने के लिए चाहते हैं (यानी 15) तो यह awk प्रयोग करके देखें:

awk '$3>15' file | sort -rk3 # Display line where column 3 > 15 and sort 

2.gui  Qxy  23 
1.gui  Qxx  16 
+0

धन्यवाद @sudo_O .. सॉर्ट करने के बाद आपको केवल पहली पंक्ति मिल गई, लेकिन मैं सभी घटनाएं प्राप्त करना चाहता हूं .. – teutara

+0

बात यह है कि, मेरी फाइल में ~ 10 मिलियन पंक्तियां हैं, मुझे नहीं पता कि प्रत्येक के लिए कितनी घटनाएं हैं .. मतलब, मैं करता हूं पता नहीं है कि मैं सिर के साथ कितनी लाइनें प्राप्त कर सकता हूं .. – teutara

+0

यदि आप सभी परिणाम चाहते हैं तो 'sort -rk3 file' –

3
एक ही सवाल के साथ भविष्य उपयोगकर्ताओं के लिए

:

-sort कमांड पर स्विच करने के लिए शुरू न करें, या आपके मूल्य 99 99 से शुरू होने का आदेश दिया गया है और 99 99 के बाद आदि .. इसलिए

का उपयोग करें
sort -rnk3 file 

और आप सबसे अधिक मूल्य के साथ केवल एक लाइन प्राप्त करना चाहते हैं, तो (डुप्लिकेट निकालने) इस का उपयोग करें:

sort -rnk3 file | awk '!x[$2]++' 

और आप सूचना के लिए -awk बता सकते हैं अगर आप एक सामान्य सीमांकक है:

sort -rnk3 file | awk -F"[. ]" '!x[$2]++' 
+0

ग्रेट - मैं उस विशिष्ट अजीब निर्माण की तलाश में था जो एक विशिष्ट क्षेत्र पर डुप्लीकेट को रोकता है - मुझे नहीं पता अगर इसे केवल बाश सॉर्ट के साथ हासिल किया जा सकता है - ऐसा लगता है कि '-u' पूरी लाइन पर काम करता है। – plof