किसी फ़ील्ड के अनुभाग के आधार पर फ़ाइल को कैसे सॉर्ट करना है


11

मैं एक फाइल छांटना चाहूंगा:

   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
     F91HE*-K92HA      7.242      3.910   4.88e+04 -- 

और यह प्राप्त करें

   A90HB#-A90HA      1.655      4.207   7.12e+05 -- 
   A90HB#-F91HA      1.653      4.411   8.59e+04 -- 
   F91HE*-F91HZ      7.237      7.122   7.85e+05 -- 
   F91HE*-K92HA      7.242      3.910   4.88e+04 -- 
   D104HN-D104HA      8.320      4.521   1.69e+05 -- 
   D104HN-D104HB*      8.320      2.823   2.93e+05 -- 
   A114HB#-A114HA      1.253      4.098   7.67e+05 -- 
   A114HB#-R111HA      1.251      3.929   1.76e+05 -- 
   A114HB#-W110HA      1.253      4.451   3.68e+04 -- 

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


जाहिरा तौर पर संपादक फ़ॉर्मेट मैं फ़ाइल के लिए इस्तेमाल नहीं निभाया ....
एडिथ

क्या आपने sortकमांड की कोशिश की है ?
एरिक रेनॉफ

हाँ, लेकिन जाहिरा तौर पर मैं नहीं जानता कि कैसे tu इसे ठीक से उपयोग करते हैं .... मैंने कोशिश की: सॉर्ट -b + 0.1n -1 लेकिन सॉर्ट एन -k1,1 -k1,4 (और अधिक अन्य) लेकिन कोई नहीं उन काम किया
एडिथ

1
आप दूसरे वर्ण से शुरू होने वाली संख्या के अनुसार क्रमबद्ध करना चाहते हैं?
pfnuesel

बिल्कुल सही। समस्या यह है कि फ़ाइल में, पहले फ़ील्ड से पहले रिक्त की अलग-अलग संख्याएँ हैं
edith

जवाबों:


19
sort -k 1.2bn < file

nमुख्य रूप से सेंट लैंक्स (और लाइन के अंत में समाप्त होने पर अनदेखा करने वाले सेंट फ़ील्ड kके 2nd चरित्र के साथ शुरू होने वाली आंख पर सॉर्ट करता है, लेकिन यह एक संख्यात्मक प्रकार के लिए मायने नहीं रखता है जो केवल दशमलव अंकों के प्रारंभिक अनुक्रम पर विचार करता है)।1b

ध्यान दें कि यदि कोई टाई है, तो इन दो लाइनों के बीच की तरह:

    F91HE*-K92HA      7.242      3.910   4.88e+04 --
  F91HE*-F91HZ      7.237      7.122   7.85e+05 --

फिर, ऑर्डर अंतिम-रिज़ॉर्ट सॉर्ट पर आधारित होगा जो स्ट्रिंग्स के रूप में पूरी तरह से दो लाइनों की तुलना करता है।

कुछ स्थानों के साथ, तारों की तुलना करने के लिए पहले उदाहरण में ब्लैंक को अनदेखा किया जाएगा जिस स्थिति में F91 एक K92 से पहले आएगा ( Fपहले की तरह K)। सी लोकेल में अन्य लोगों की तरह, रिक्त स्थान को नजरअंदाज नहीं किया जाएगा और K92 फिर F91 एक (अंतरिक्ष पहले F) से पहले आएगा ।

एक अंतिम-रिज़ॉर्ट प्रकार के लिए, जो लोकेल की परवाह किए बिना प्रमुख खाली को अनदेखा करेगा, आप कर सकते हैं:

sort -k 1.2bn -k 1b < file

यह उस 1bपंक्ति के खंड पर (पहली कुंजी पर संबंधों को) लेक्सिक रूप से क्रमबद्ध करेगा, जो पहले क्षेत्र से शुरू होता है, जिसमें प्रमुख कोनों की अनदेखी होती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.