जवाबों:
सामान्य संख्यात्मक प्रकार फ़्लोट्स के रूप में संख्याओं की तुलना करता है, यह वैज्ञानिक संकेतन की अनुमति देता है जैसे 1.234E10 लेकिन धीमी है और गोलाई त्रुटि के अधीन है (1.2345678 1.2345679 के बाद आ सकता है), संख्यात्मक क्रमांक केवल एक नियमित रूप से वर्णनात्मक है जो जानता है कि 9 के बाद 10 आता है।
Http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html देखें
'-ग' '- -गर्नल-न्यूमेरिक-सॉर्ट' '- एसोर्ट = जनरल-न्यूमेरिक' क्रमबद्ध रूप से, प्रत्येक लाइन के एक उपसर्ग को डबल-प्रिसिजन फ़्लोटिंग पॉइंट संख्या में बदलने के लिए मानक C फ़ंक्शन स्ट्रटोड का उपयोग करते हुए। यह अस्थायी बिंदु संख्या को वैज्ञानिक संकेतन में निर्दिष्ट करने की अनुमति देता है, जैसे 1.0e-34 और 10e100। LC_NUMERIC स्थान दशमलव-बिंदु वर्ण निर्धारित करता है। ओवरफ़्लो, अंडरफ़्लो या रूपांतरण त्रुटियों की रिपोर्ट न करें। निम्नलिखित कोलाजिंग अनुक्रम का उपयोग करें: वे रेखाएँ जो संख्याओं से शुरू नहीं होती हैं (सभी को समान माना जाता है)। एक सुसंगत लेकिन मशीन पर निर्भर क्रम में NaNs ("आईईईई फ्लोटिंग पॉइंट अंकगणित में" नंबर नहीं)। माइनस इनफिनिटी। आरोही संख्यात्मक क्रम में परिमित संख्या (-0 और +0 बराबर)। साथ ही अनंत।
इस विकल्प का उपयोग केवल तभी करें जब कोई विकल्प न हो; यह --numeric- सॉर्ट (-n) की तुलना में बहुत धीमा है और यह फ़्लोटिंग पॉइंट में परिवर्तित होने पर जानकारी खो सकता है।
'-n' '--numeric-sort' '--sort = numerically क्रमबद्ध करें। संख्या प्रत्येक पंक्ति से शुरू होती है और इसमें वैकल्पिक रिक्त स्थान होते हैं, एक वैकल्पिक '-' चिह्न, और शून्य या अधिक अंक संभवतः हजारों विभाजकों द्वारा अलग किए जाते हैं, वैकल्पिक रूप से एक दशमलव-बिंदु चरित्र और शून्य या अधिक अंकों के बाद। एक खाली संख्या को '0' के रूप में माना जाता है। LC_NUMERIC स्थान दशमलव-बिंदु वर्ण और हजारों विभाजक को निर्दिष्ट करता है। डिफ़ॉल्ट रूप से एक रिक्त स्थान या टैब है, लेकिन LC_CTYPE स्थान इसे बदल सकते हैं।
तुलना सटीक है; कोई गोल त्रुटि नहीं है।
न तो एक अग्रणी '+' और न ही घातीय संकेतन मान्यता प्राप्त है। संख्यात्मक रूप से इस तरह के तारों की तुलना करने के लिए, --general-संख्यात्मक-सॉर्ट (-g) विकल्प का उपयोग करें।
-k3.2nया तो का उपयोग करना -k3.2g, यह R10पहले छँटाई है R2। सॉर्ट लेक्सिकोग्राफ़िक है, न कि संख्यात्मक। मुझे उम्मीद है कि यह दूसरे चरित्र से एक नंबर के रूप में क्षेत्र का इलाज करेगा।
sortप्रमुख चश्मा। वास्तव में बीजान्टिन हैं - इसका छोटा हिस्सा है: क्षेत्र से पहले खाली (ओं) को क्षेत्र का हिस्सा माना जाता है , इसलिए चार। सूचकांक (1) क्षेत्र के पूर्ववर्ती अंक को इंगित करता है, न कि क्षेत्र का वास्तविक पहला चार्ट। प्रत्यय चार। bइस समस्या को ठीक करने के लिए सूचकांक , यानी: -k 3.2bn,3(ध्यान दें कि वैश्विक -b विकल्प इस मामले में काम नहीं करता है )। जोड़ा गया पर भी ध्यान दें ,3, जो यह सुनिश्चित करता है कि केवल 3rd फ़ील्ड का उपयोग किया जाता है - उस 2nd फ़ील्ड इंडेक्स के बिना, पूरी पंक्ति के शेष का उपयोग किया जाता है।
आपको अपने लोकेल से सावधान रहना चाहिए। उदाहरण के लिए, आप एक फ्लोटिंग नंबर (जैसे 2.2) को छाँटने का इरादा कर सकते हैं, जबकि आपका लोकेल अल्पविराम (जैसे 2) के उपयोग की उम्मीद कर सकता है।
जैसा कि इस फ़ोरम में बताया गया है , आपके पास -n या -g झंडे का उपयोग करने के गलत परिणाम हो सकते हैं।
मेरे मामले में मैं उपयोग करता हूं:
LC_ALL=C sort -k 6,6n file
6 वें कॉलम को छाँटने के लिए जिसमें निम्न शामिल हैं:
2.5
3.7
1.4
प्राप्त करने हेतू
1.4
2.5
3.7
-nकॉमा को एक हजारों विभाजक के रूप में नहीं पहचान सकता - "1,000" को "1" के समान माना जाता है।
sortका उपयोग करता है: पंक्ति / कुंजी का सबसे लंबा हिस्सा यह पहचानता है कि एक संख्या का उपयोग किया जाता है; एक ऐसे लोकेल में, जो मूलांक वर्ण के रूप में उपयोग होता है , यह पढ़ना बंद कर देगा । .,
LC_ALL=Cवास्तव में सबसे मजबूत विकल्प है; हालाँकि, अगर LC_ALLसेट नहीं होता है , तो LANG=Cभी काम करेगा।
LANG=C sort -k 6,6n fileदोनों सरल है और पर्यावरण कमांड को विशिष्ट कमांड पर सेट करने के प्रभाव को भी स्थानीयLANG करता है।
स्वीकृत उत्तर के अलावा जो उल्लेख -gवैज्ञानिक संकेतन की अनुमति देता है , मैं उस हिस्से को दिखाना चाहता हूं जो सबसे अधिक अवांछनीय व्यवहार का कारण बनता है।
के साथ -g:
$ LC_COLLATE=fr_FR.UTF-8 LC_NUMERIC=en_US.UTF-8 sort -g myfile
baa
--inf
--inf
--inf-
--inf--
--inf-a
--nnf
nnf--
nnn
tnan
zoo
naN
Nana
nani lol
-inf
-inf--
-11
-2
-1
1
+1
2
+2
0xa
11
+11
inf
यहां देखें zoo, तीन महत्वपूर्ण बातें:
रेखा शुरू होती है NAN(जैसे Nanaऔर nani lol) या -INF(एकल डैश, नहीं --INF) अंत करने के लिए कदम लेकिन अंकों से पहले। जबकि INFअंकों के बाद अंतिम पर जाएं क्योंकि इसका अर्थ है अनंत ।
NAN, INF, और -INFकर रहे हैं केस संवेदी ।
लाइनों हमेशा के दोनों ओर से खाली स्थान के उपेक्षा NAN, INF, -INF (भले ही LC_CTYPE)। अन्य वर्णमाला या तो व्हाट्सएप को नजरअंदाज कर सकते हैं, लोकेल पर निर्भर करता है LC_COLLATE(जैसे LC_COLLATE=fr_FR.UTF-8अनदेखा करें लेकिन LC_COLLATE=us_EN.UTF-8अनदेखा न करें)।
इसलिए यदि आप मनमाना अल्फ़ान्यूमेरिक छाँट रहे हैं, तो आप शायद नहीं चाहते हैं -g। यदि आपको वास्तव में वैज्ञानिक संकेतन तुलना की आवश्यकता है -g, तो आप संभवतः वर्णमाला और संख्यात्मक डेटा निकालना चाहते हैं और तुलना अलग से करते हैं ।
यदि आपको केवल साधारण संख्या (जैसे 1, -1) छंटनी की आवश्यकता है, और महसूस करें कि 0x/E/+ sortingमहत्वपूर्ण नहीं है, तो बस -nपर्याप्त उपयोग करें :
$ LC_COLLATE=fr_FR.UTF-8 LC_NUMERIC=en_US.UTF-8 sort -n myfile
-1000
-22
-13
-11
-010
-10
-5
-2
-1
-0.2
-0.12
-0.11
-0.1
0x1
0x11
0xb
+1
+11
+2
-a
-aa
--aa
-aaa
-b
baa
BAA
bbb
+ignore
inf
-inf
--inf
--inf
--inf-
--inf--
-inf--
--inf-a
naN
Nana
nani lol
--nnf
nnf--
nnn
None
uum
Zero cool
-zzz
1
1.1
1.234E10
5
11
या तो, -gया स्थानीय प्रभाव से-n अवगत रहें । आप यह निर्दिष्ट कर सकते हैं LC_NUMERICके रूप में us_EN.UTF-8 fr_FR.UTF-8 प्रकार से बचने के लिए -चल संख्या में विफल रहा है के साथ :
$ LC_COLLATE=fr_FR.UTF-8 LC_NUMERIC=fr_FR.UTF-8 sort -n myfile
-10
-5
-2
-1
-1.1
-1.2
-0.1
-0.11
-0.12
-0.2
-a
+b
middle
-wwe
+zoo
1
1.1
के साथ LC_NUMERIC=en_US.UTF-8:
$ LC_COLLATE=fr_FR.UTF-8 LC_NUMERIC=en_US.UTF-8 sort -n myfile
-10
-5
-2
-1.2
-1.1
-1
-0.2
-0.12
-0.11
-0.1
-a
+b
middle
-wwe
+zoo
1
1.1
या LC_NUMERIC=us_EN.UTF-8के +|-|spaceसाथ समूह के लिए alpha:
$ LC_COLLATE=fr_FR.UTF-8 LC_NUMERIC=us_EN.UTF-8 sort -n myfile
-0.1
a
b
a
b
+b
+zoo
-a
-wwe
middle
1
यदि आप पोर्टेबल स्क्रिप्ट लिखना चाहते हैं, तो संभवतः आप इसका localeउपयोग sortकरना चाहते हैं।
sortनहीं है,manलेकिनinfoपृष्ठ (info sort) है।