2013-07-02 6 views
19

पर आधारित एक टैब सीमांकित फ़ाइल सॉर्ट करें मैं चौथी कॉलम के आधार पर इस फ़ाइल को सॉर्ट करने का प्रयास कर रहा हूं। मैं चाहता हूं कि फ़ाइल चौथे कॉलम के मानों के आधार पर पुन: व्यवस्थित हो।कॉलम सॉर्ट कमांड bash

फ़ाइल:

2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 
1 1:10363487:T 0 10363487 

मैं इसे इस तरह हल कर हैं:

1 1:10363487:T 0 10363487 
2 1:103496792:A 0 103496792 
3 1:103544434:A 0 103544434 
4 1:103548497:A 0 103548497 

मैं इस आदेश की कोशिश की:

sort -t$'\t' -k1,1 -k2,2 -k3,3 -k 4,4 <filename> 

लेकिन मैं अवैध चर नाम त्रुटि मिलती है। क्या कोई मेरी इस बारे में मदद कर सकता है?

उत्तर

44

चौथे कॉलम उपयोग को क्रमबद्ध करने के लिए केवल -k 4,4 चयनकर्ता का उपयोग करें।

sort -t $'\t' -k 4,4 <filename> 

आप -V भी चाह सकते हैं जो संख्याओं को अधिक स्वाभाविक रूप से टाइप करता है। उदाहरण के लिए, 1 10 2 (लेक्सिकोग्राफिक ऑर्डर) के बजाय 1 2 10 उपज।

sort -t $'\t' -k 4,4 -V <filename> 

आप तो सुनिश्चित करें कि आपके खोल bash है $'\t' के बारे में त्रुटियों मिल रहे हैं। शायद आप अपनी स्क्रिप्ट के शीर्ष पर #!/bin/bash खो रहे हैं?

+0

वही त्रुटि हालांकि .. अवैध चर नाम। मुझे नहीं पता कि इसे कैसे हल किया जाए। मुझे पता है कि समस्या $ – Vignesh

+1

के साथ है सुनिश्चित करें कि आप बैश का उपयोग कर रहे हैं और '#!/Bin/sh' या' sh script' –

+2

नहीं, इसके अलावा, '-t' विकल्प यहां वैकल्पिक होगा, क्योंकि डिफ़ॉल्ट कॉलम विभाजक आपकी फाइल के लिए "कोई भी व्हाइटस्पेस" पर्याप्त होगा। – chepner

3

मेरा मानना ​​है कि आपके पास आपके आदेश में $ है।

प्रयास करें:

sort -t\t -nk4 
+2

'$ '..' 'बचने के अनुक्रमों का विस्तार करने के लिए बैश वाक्यविन्यास है। इस मामले में यह एक शाब्दिक टैब तक फैलता है। –

+0

जिसने मदद की लेकिन इसे 1 2 10 से 1 10 2 22 के रूप में आदेशित नहीं किया ?? – Vignesh

+1

यही है कि '-n' ध्वज करना चाहिए (संख्यात्मक क्रम)। – Phylogenesis