2012-08-13 8 views
12

द्वारा सीएसवी फ़ाइल को सॉर्ट करें मेरे पास सीएसवी फ़ाइल है जो ";" द्वारा सीमित फ़ील्ड के साथ है। 8 फ़ील्ड हैं, और मैं अपने डेटा को पहले 4 कॉलम से क्रमबद्ध करना चाहता हूं, पहले क्रम में कॉलम 1, फिर कॉलम 1, फिर कॉलम 2, आदि)बैश: पहले 4 कॉलम

मैं लिनक्स में कमांड लाइन से यह कैसे कर सकता हूं?

मैंने खुले कार्यालय के साथ प्रयास किया, लेकिन यह केवल मुझे 3 कॉलम चुनने देता है।

संपादित करें: जिन क्षेत्रों पर मैं अपने डेटा को सॉर्ट करना चाहता हूं, उनमें से तीन फ़ील्ड संख्यात्मक मानों के साथ तार होते हैं, केवल एक स्ट्रिंग। मैं इसे sort कमांड के साथ कैसे निर्दिष्ट कर सकता हूं?

उत्तर

20

प्रयास करें:

sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n test.txt 

जैसे:

1;2;100;4 
1;2;3;4 
10;1;2;3 
9;1;2;3 

> sort -t\; -k 1,1n -k 2,2n -k 3,3n -k 4,4n temp3 
1;2;3;4 
1;2;100;4 
9;1;2;3 
10;1;2;3 
+0

धन्यवाद। यहां '1,1 एन' का अर्थ क्या है? –

+0

संख्यात्मक – Vijay

+0

द्वारा सॉर्टिंग ओह ठीक है। तो, कहें कि फ़ील्ड 3 में स्ट्रिंग्स हैं, मैं डिक्शनरी ऑर्डर द्वारा सॉर्ट करने के लिए '-k 3,3d' करूंगा, है ना? –

8

sort -k आपको सॉर्ट कुंजी को परिभाषित करने की अनुमति देगा। man sort से:

-k, --key=POS1[,POS2] 
     start a key at POS1 (origin 1), end it at POS2 (default end of line). 

तो

$ sort -t\; -k1,4 

यह करना चाहिए। ध्यान दें कि मैं सेमी-कोलन से बच गया हूं, अन्यथा खोल इसे अंत-कथन के रूप में व्याख्या करेगी।

+0

धन्यवाद। क्या 'सॉर्ट' प्रत्येक फ़ील्ड के लिए भी निर्दिष्ट करने की अनुमति देता है चाहे मैं संख्यात्मक रूप से या वर्णानुक्रम को सॉर्ट करना चाहता हूं? (मेरा अंतिम संपादन देखें) –