2013-08-21 8 views
5

मैं इस फ़ाइल है:कॉलम द्वारा अनन्य छंटनी - सॉर्ट कमांड?

hello 1 
hello 2 
world 1 
world 2 
hello 3 
hi 3 
hi 4 

मैं तो इस तरह क्रमबद्ध करना चाहते हैं,

hello 1 
hi 3 
world 1 

बात मैं कॉलम में केवल पहले अद्वितीय आइटम की जरूरत है 1.

मैं sort -k1 -u file.txt की कोशिश की है लेकिन यह काम नहीं कर रहा है जैसा कि मैं उम्मीद करता हूं। यह कैसे करना है?

+0

संभावित डुप्लिकेट [क्या कॉलम द्वारा 'uniq' का कोई तरीका है?] (http://stackoverflow.com/questions/1915636/is-there-a-way-to-uniq-by-column) –

उत्तर

20

यह आप के लिए काम कर सकते हैं:

sort -uk1,1 file 

यह केवल पहले मैदान पर फ़ाइल सॉर्ट करता है और पहले क्षेत्र के आधार पर डुप्लिकेट लाइनों को हटा।

+0

मैं इस परीक्षण किया पर समाप्त और यह काम करता – Daniel

+1

+1 बहुत अच्छा, अंतर' -k1' और '-k1,1' – anubhava

+2

के बीच था तो आप इस के बारे में समझाएं कर सकते हैं? – Mari

3

आप पाइप कर सकते हैं यह awk के लिए:

sort -k1 file | awk '!($1 in a){a[$1]; print}' 
hello 1 
hi 3 
world 1 
+1

क्या आप ऊपर दिए गए समाधान की व्याख्या कर सकते हैं – Mari

+1

awk कमांड चेक '$ 1' सरणी 'ए' में मौजूद है। यदि यह अस्तित्व में नहीं है तो यह सरणी 'ए' में पूरी लाइन प्रिंट करता है और '$ 1' सामान देता है। – anubhava

+0

क्यों sort -k1 -u file.txt काम नहीं करता है? मूल रूप से यहां हम पहले कॉलम के आधार पर डुप्लीकेट को सॉर्ट और हटा रहे हैं? – Mari

5

क्रमबद्ध और स्तंभ के आधार पर 1

तरह अद्वितीय सूची दे -u आयकर: -k 1,1 test.txt

आयकर: = पेट के विभाजक है

-k 1,1 = स्तंभ के आधार पर 1

क्रमबद्ध और स्तंभ 1 & स्तंभ के आधार पर अद्वितीय सूची दे 3

तरह -u आयकर: -k 1,1 -k 3,3 test.txt

आयकर: = पेट के विभाजक

-k 1,1 3,3 है = स्तंभ 1 & के आधार पर कॉलम 3

संबंधित मुद्दे