2011-09-14 11 views
30

मेरे पास 7 फ़ील्ड डेटा के साथ एक सीएसवी फ़ाइल है। मैं 7 वें फ़ील्ड को रिवर्स न्यूमेरियल ऑर्डर (पहले सबसे छोटे मान) में सॉर्ट करना चाहता हूं। डेटा के 7 वें क्षेत्र इस तरह दिखता है:यूनिक्स घातीय मूल्यों के साथ क्रमबद्ध करें?

0.498469643137 
1 
6.98112003175e-10 
9.11278069581e-06 

मैं इस तरह यूनिक्स तरह उपकरण का उपयोग करने की कोशिश की है:

$ sort -t"," -n -k -r 7 <my_file> 

समस्या मैं कर रहा हूँ उस तरह चरघातांकी रूप को नहीं पहचानता है। उदाहरण के लिए, 6.98112003175e-101 से बड़ा लगता है। मैं एक सीएसवी कॉलम को सॉर्ट करने के लिए सॉर्ट का उपयोग कैसे कर सकता हूं, लेकिन वैज्ञानिक नोटेशन को पहचान सकता हूं? मदद के लिए अग्रिम धन्यवाद।

+4

'-g' ध्वज का प्रयास करें। –

उत्तर

50

'-g' विकल्प के साथ क्रमबद्ध करें आपके लिए चाल चलनी चाहिए। उदाहरण के लिए, रूसी स्थानीयकरण ',' चरित्र नहीं बल्कि '.' की तुलना में संख्या के कुछ हिस्सों delimits में: जी विकल्प छँटाई

+0

धन्यवाद, मैंने मैन पेज पढ़ा, लेकिन मुझे -जी ध्वज के बारे में कुछ भी नहीं मिला। यह ठीक वही था जो मैं खोज रहा था। – drbunsen

5

कृपया ध्यान दें के लिए 'सामान्य संख्यात्मक मूल्य का उपयोग', आपके क्षेत्र की एक और सीमांकक मान सकते हैं इंगित करता है। इस मामले में आपको LANG चर को ध्यान में रखना चाहिए।

मेरे मामले में LANG ru_RU.KOI8-R पर सेट किया गया था और इसलिए sort -g ने मुझे गलत परिणाम दिया।

+1

मुझे यह समस्या भी थी। यहां मुझे एक समाधान मिला https://askubuntu.com/questions/724338/how-to-set-lc-numeric-to-english- स्थायी रूप से – psmith

0

तो - केवल उन लोगों के लिए एक उदाहरण देने के लिए जो इसे नहीं जानते हैं: "-n" के बजाय आप "-g" का उपयोग करते हैं। l = 1,0.3,6.01e-10

sort -t$',' -n example.txt

0.3 1 6.01e-10

sort -t$',' -g example.txt

6.01e-10 0.3 1

+0

क्या आप विस्तृत कर सकते हैं? – Kmeixner

+0

कैसे? -g 'सामान्य संख्यात्मक मूल्य का उपयोग' के लिए है। कृपया उपयोग करने के बारे में उपर्युक्त पोस्ट पढ़ें- जी। यदि आपके पास अभी भी प्रश्न हैं तो मैं निश्चित रूप से उन्हें जवाब देने का प्रयास करूंगा! – amc