2014-10-13 9 views
5

मैं वैज्ञानिक और अस्थायी मान जो सकारात्मक और नकारात्मक दोनों कर रहे हैं, उदाहरण के लिए से बाहर एक मिश्रण सॉर्ट करने के लिए आदेश sort, उपयोग करने के लिए सख्त कोशिश कर रहे हैं:क्रमबद्ध वैज्ञानिक और नाव

-2.0e+00 
2.0e+01 
2.0e+02 
-3.0e-02 
3.0e-03 
3.0e-02 
चल बिन्दु के बिना या बिना

वैज्ञानिक एक्सपोनेंट, यह sort -k1 -g file.dat के साथ ठीक काम करता है। का उपयोग करते हुए दोनों एक ही बार में जैसा कि पहले कहा, यह परिणाम:

-2.0e+00  
-3.0e-02 
3.0e-03 
3.0e-02 
... 

किसी भी विचार कैसे मैं इस समस्या को हल कर सकते हैं:

-3.0e-02 
-2.0e+00 
2.0e+01 
2.0e+02 
3.0e-02 
3.0e-03 

इस के बाद से यह होना चाहिए स्पष्ट रूप से गलत है? और एक बार जब मैं इसे हल करता हूं, तो क्या पूर्ण मूल्य को हल करने की कोई संभावना है (उदाहरण के लिए नकारात्मक लोगों से छुटकारा पाएं)? मुझे पता है कि मैं प्रत्येक मान को स्क्वायर करने की कोशिश कर सकता हूं, सॉर्ट करें, स्क्वायर रूट ले लो। ऐसा करने से मैं कम सटीक होगा हालांकि यह अच्छा, तेज़ और सीधा तरीका रखने के लिए साफ होगा।

मेरे Linux सिस्टम: 8.12, कॉपीराइट © 2011

आपको बहुत बहुत धन्यवाद!

अद्यतन: अगर मैं डिबग मोड sort -k1 -g filename.dat --debug मैं निम्नलिखित परिणाम प्राप्त में इसे चलाने के (मैं इस पर अंग्रेज़ी अनुवाद, उत्पादन जर्मन था)

sort: the sorting rules for „de_DE.UTF-8" are used 
sort: key 1 is numerically and involves several fields 
-3.0e-02 
__ 
________ 
-2.0e+00 
__ 
________ 
2.0e+01 
_ 
_______ 
2.0e+02 
_ 
_______ 
3.0e-02 
_ 
_______ 
3.0e-03 
_ 
_______ 
+0

यह "गलत" नहीं है। यह सिर्फ एक स्ट्रिंग के रूप में छंटनी है। '-n' मदद कर सकता है, हालांकि मुझे नहीं पता कि यह फ्लोट मानों को संभाल लेगा या नहीं। –

+0

@MarcB: ध्यान दें कि वह * के साथ शुरू करने के लिए संख्यात्मक सॉर्टिंग ('-g') का उपयोग कर रहा है। – DevSolar

+0

हां, [-एन] सही आउटपुट भी नहीं उत्पन्न करता है, कोशिश की है कि – Jan

उत्तर

1

प्रश्न के अंतर्गत टिप्पणियों के आधार पर, इस के लिए कोई स्थान मुद्दा है : sort एक लोकेल का उपयोग कर रहा है, जो , को दशमलव विभाजक के रूप में उम्मीद करता है, जबकि आपके टेक्स्ट में . है। आदर्श समाधान sort एक अलग लोकेल का उपयोग करना होगा, और उम्मीद है कि कोई व्यक्ति उसमें सही जवाब लिख देगा।

लेकिन, यदि आप नहीं कर सकते हैं, या नहीं चाहते हैं, तो sort कैसे काम करता है, तो आप इनपुट को बदल सकते हैं। यह sort अपने पाइप से इनपुट ले कर सबसे आसान है, और इसे रास्ते में संशोधित करें। यहाँ यह ., के लिए हर बदलने के लिए पर्याप्त है, इसलिए पसंद का उपकरण tr है:

cat file.dat | tr . , | sort -k1 -g 

यह समाधान एक बड़ा दोष यह है: आदेश स्थान जहां एक तरह से दशमलव विभाजक के रूप . का उपयोग करता है, तो बजाय साथ क्रियान्वित किया जाता है, तो फिक्सिंग, यह सॉर्टिंग तोड़ देगा। तो यदि आप एक शेल स्क्रिप्ट लिख रहे हैं, जिसका उपयोग कहीं और किया जा सकता है, तो ऐसा न करें।

महत्वपूर्ण नोट: ऊपर आदेश में unnecessary use of cat है। हर कोई जो पेशेवर शेल स्क्रिप्ट प्रोग्रामर के रूप में गंभीरता से लिया जाना चाहता है, ऐसा मत करो!

+0

आप यूयूओसी से 'tr।, fedorqui

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