यह सरल, संक्षिप्त, और लिखना, समझना और जांचना आसान है, और मुझे व्यक्तिगत रूप से यह पसंद है:
grep -oE '\S+$' file
grep
उबंटू में , जब -E
या के साथ आह्वान किया जाता है, तो व्हाट्सएप चरित्र का अर्थ करने के -P
लिए शॉर्टहैंड लेता है (व्यवहार में आमतौर पर एक स्थान या टैब) और ऐसा कुछ भी नहीं होने का मतलब है। क्वांटिफायर और एंड-ऑफ-लाइन एंकर का उपयोग करते हुए , पैटर्न एक पंक्ति के अंत में एक या अधिक गैर-रिक्तता से मेल खाता है । आप इसके बजाय उपयोग कर सकते हैं ; इस मामले में अर्थ समान है लेकिन एक अलग नियमित अभिव्यक्ति इंजन का उपयोग किया जाता है, इसलिए उनके पास अलग-अलग प्रदर्शन विशेषताएं हो सकती हैं ।\s
\S
+
$
\S+$
-P
-E
यह अविनाश राज के टिप्पणी समाधान के बराबर है (बस एक आसान, अधिक कॉम्पैक्ट वाक्य रचना के साथ):
grep -o '[^[:space:]]\+$' file
यदि संख्या के बाद व्हॉट्सएप हो सकता है तो ये दृष्टिकोण काम नहीं करेंगे । उन्हें संशोधित किया जा सकता है इसलिए वे ऐसा करते हैं, लेकिन मुझे इसमें जाने का कोई मतलब नहीं है। यद्यपि यह कभी-कभी अधिक मामलों के तहत काम करने के लिए एक समाधान को सामान्य बनाने के लिए निर्देशात्मक है, लेकिन ऐसा करना व्यावहारिक नहीं है क्योंकि लोग अक्सर ऐसा मानते हैं, क्योंकि किसी के पास आमतौर पर यह जानने का कोई तरीका नहीं होता है कि समस्या के कई अलग-अलग तरीकों में से किसके लिए अंततः आवश्यकता हो सकती है। सामान्य किया जाए।
प्रदर्शन कभी-कभी एक महत्वपूर्ण विचार होता है। यह प्रश्न निर्धारित नहीं करता है कि इनपुट बहुत बड़ा है, और यह संभावना है कि यहां पोस्ट की गई प्रत्येक विधि काफी तेज़ है। हालाँकि, यदि मामले में गति वांछित है, तो दस मिलियन लाइन इनपुट फ़ाइल पर एक छोटा बेंचमार्क है:
$ perl -e 'print((<>) x 2000000)' file > bigfile
$ du -sh bigfile
439M bigfile
$ wc -l bigfile
10000000 bigfile
$ TIMEFORMAT=%R
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
819.565
$ time grep -oE '\S+$' bigfile > bigfile.out
816.910
$ time grep -oP '\S+$' bigfile > bigfile.out
67.465
$ time cut -d= -f2 bigfile > bigfile.out
3.902
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
815.183
$ time grep -oE '\S+$' bigfile > bigfile.out
824.546
$ time grep -oP '\S+$' bigfile > bigfile.out
68.692
$ time cut -d= -f2 bigfile > bigfile.out
4.135
मैंने दो बार इसे चलाया जब मामले ने आदेश दिया (जैसा कि यह कभी-कभी I / O-भारी कार्यों के लिए होता है) और क्योंकि मेरे पास एक मशीन उपलब्ध नहीं थी जो पृष्ठभूमि में अन्य सामान नहीं कर रही थी जो परिणामों को तिरछा कर सकती थी। उन परिणामों से मैं निम्नलिखित का निष्कर्ष निकालता हूं, कम से कम अनंतिम रूप से और मेरे द्वारा उपयोग किए गए आकार की इनपुट फ़ाइलों के लिए:
वाह! पासिंग -P
( PCRE का उपयोग करने के बजाय) -G
(डिफ़ॉल्ट जब कोई बोली निर्दिष्ट नहीं है) या परिमाण के एक क्रम से अधिक तेज़ -E
बना दिया grep
जाता है। इसलिए बड़ी फ़ाइलों के लिए, इस कमांड का उपयोग करना बेहतर हो सकता है, जैसा कि ऊपर दिखाया गया है:
grep -oP '\S+$' file
वाह!! cut
में विधि αғsнιη का जवाब , , यहां तक कि मेरे रास्ते से तेजी से संस्करण की तुलना में तेज परिमाण के एक आदेश खत्म हो गया है! यह Pa4080 के बेंचमार्क में भी विजेता था , जिसने इससे अधिक तरीकों को कवर किया, लेकिन छोटे इनपुट के साथ - और इसीलिए मैंने इसे, अन्य सभी तरीकों में से, अपने टेस्ट में शामिल करने के लिए चुना। यदि प्रदर्शन महत्वपूर्ण है या फाइलें बड़ी हैं, तो मुझे लगता है कि αнsнι method की विधि का उपयोग किया जाना चाहिए।cut -d= -f2 file
cut
यह एक अनुस्मारक के रूप में भी कार्य करता है कि सरल cut
और paste
उपयोगिताओं को भुलाया नहीं जाना चाहिए , और लागू होने पर शायद पसंद किया जाना चाहिए, हालांकि इस तरह के अधिक परिष्कृत उपकरण हैं grep
जिन्हें अक्सर पहली पंक्ति के समाधान के रूप में पेश किया जाता है (और यह कि मैं व्यक्तिगत रूप से अधिक आदी हूं। का उपयोग करते हुए)।
grep -o '[^[:space:]]\+$' file