मैं कई व्हाट्सएप द्वारा अलग-अलग कट का उपयोग कैसे करूं?


23

मैं इस नमूने का अंतिम कॉलम प्राप्त करना चाहूंगा:

[  3]  1.0- 2.0 sec  1.00 MBytes  8.39 Mbits/sec
[  3]  2.0- 3.0 sec   768 KBytes  6.29 Mbits/sec
[  3]  3.0- 4.0 sec   512 KBytes  4.19 Mbits/sec
[  3]  4.0- 5.0 sec   256 KBytes  2.10 Mbits/sec
...

अगर मैं उपयोग करता हूं

cut -d\  -f 13

मुझे मिला

Mbits/sec
6.29
4.19
2.10

क्योंकि कभी-कभी बीच में अतिरिक्त स्थान होते हैं।


अंतिम स्तंभ वह है Mbits/sec, जो आप चाहते हैं या 2 अंतिम कॉलम हैं?
terdon

1
मैं केवल 2 पिछले कॉलम को प्राप्त करना चाहता हूं, केवल संख्याएं
rubo77

जवाबों:


17

अपने प्रश्न का शाब्दिक उत्तर देने के लिए:

sed 's/   */:/g' | cut -d : -f 5

या

awk -F '  +' '{print $5}'

लेकिन ऐसा नहीं होगा यदि कोष्ठक में संख्या 10 तक पहुंचती है, आदि यदि आप केवल संख्याओं में रुचि रखते हैं, तो आप बाकी सब कुछ निकाल सकते हैं।

sed 's/[^.0-9][^.0-9]*/:/g' | cut -d : -f 6

हां, केवल संख्याओं पर यकीन है, लेकिन केवल आपका तीसरा उदाहरण सही ढंग से काम करता है
rubo77

@ rubo77 मेरे लिए काम करता है। पहले दो उदाहरण वही करते हैं जो आप अपने शीर्षक में पूछते हैं। या आप यूनिट को भी अलग करना चाहते थे? उस मामले में, | sed 's/ .*//'पहले दो उदाहरणों के अंत में जोड़ें । बेशक इसे करने के कई अन्य तरीके हैं।
गिल्स एसओ- बुराई को रोकना '

+इसके बजाय थोड़ा सा छोटा *: बिल्ली परीक्षण | sed 's / [^ 0-9] \ + /: / g' | cut -d: -f 6
rubo77

@ rubo77 यदि आपका sed इसका समर्थन करता है, तो यह है। यह GNU और बिजीबॉक्स द्वारा समर्थित है लेकिन उदाहरण के लिए BSD या Solaris द्वारा नहीं। POSIX निर्दिष्ट करता है +और ?ERE में लेकिन पत्तियां \+और \?BRE अपरिभाषित हैं।
गिल्स एसओ- बुराई को रोकना '

22

अगर हम सभी मल्टीपल लगातार स्पेस को सिंगल स्पेस में बदलने के लिए निचोड़ विकल्प ( ध्वज) trके साथ कमांड का उपयोग करते हैं और फिर सीमांकक के रूप में अंतरिक्ष के साथ ऑपरेशन करते हैं - हम संख्याओं को ले जाने वाले आवश्यक कॉलम तक पहुंच सकते हैं।-scut

कोड का संदर्भ लें

cat file | tr -s ' ' | cut -d ' ' -f 8


4
यह उत्तर अधिक होना चाहिए; यह अब तक का सबसे सरल और सबसे पठनीय समाधान है।
ल्यूक डेविस

5

ये आदेश सभी अलग-अलग फ़ाइल के अंतिम कॉलम को प्रिंट करेंगे:

  • awk '{print $NF}' file

    में awk, NFखेतों की संख्या $NFहै और अंतिम क्षेत्र है।

  • perl -lane 'print $F[$#F]' file

    -aफ़ाइल को व्हाट्सएप पर सरणी में विभाजित करता है @F, सरणी $#Fमें तत्वों की संख्या है इसलिए $F[$#F]अंतिम तत्व है। -nसाधन कमांड लाइन पर दिए गए फ़ाइल को पढ़ने और स्क्रिप्ट के साथ पारित कर दिया लागू -eप्रत्येक पंक्ति के लिए। -lबस \nप्रत्येक printकथन में एक नया वर्ण ( ) जोड़ता है ।

  • sed 's/.* //g'

    एक साधारण नियमित अभिव्यक्ति जो अंतिम स्थान के लिए सब कुछ से मेल खाती है और इसे हटा देती है, केवल अंतिम कॉलम को छोड़कर।

  • rev file | cut -d' ' -f 1 | rev

    revइसके उत्पादन को उलट देता है इसलिए अंतिम क्षेत्र पहला है, cutइसे प्रिंट करने के लिए और revपाठ को वापस सामान्य करने के लिए सीमांकित स्थान है । यदि आपके पास लगातार व्हाट्सएप है तो यह काम नहीं करता है

आपके इनपुट के आधार पर, मैं अनुमान लगा रहा हूं कि आप वास्तव में अंतिम कॉलम नहीं चाहते हैं, लेकिन एक या दो अंतिम वाले हैं। उस स्थिति में अंतिम 2 ( 8.39 Mbits/sec) प्रिंट करने के लिए इनका उपयोग करें :

awk '{print $(NF-1),$NF}' file 
perl -lane 'print "$F[$#F-1] $F[$#F]"' file 
sed 's/.* \(.* .*\)/\1/' file 
rev file | cut -d' ' -f 1,2 | rev

और ये पेनल्‍टी प्रिंट करने के लिए ( 8.39):

awk '{print $(NF-1)}' file 
perl -lane 'print $F[$#F-1]' file 
sed 's/.* \(.*\) .*/\1/' file 
rev file | cut -d' ' -f 2 | rev

4

आप cutमैनुअल के अनुसार व्हाट्सएप की कई घटनाओं को अलग नहीं कर सकते हैं :

आउटपुट फ़ील्ड फ़ील्ड सीमांकक वर्ण की एकल घटना से अलग हो जाते हैं।

जब तक कि पाठ को एक ही राशि से अलग नहीं किया जाता है या आप trउनमें से अतिरिक्त को हटाने के लिए उपयोग करते हैं।

अन्यथा वैकल्पिक उपकरण जैसे awk, sedया का उपयोग करें ex

उदाहरण के लिए:

ex -s +'%norm $2Bd0' +%p +q! foo.txt

जगह में परिवर्तन को बचाने के लिए के +q!साथ बदलें -cwq


0

एक पर्ल वन-लाइनर का उपयोग करें जैसे:

perl -lane 'print $F[-2]' input_file

स्पष्टीकरण:

ऑप्शन के -eकारण perl दुभाषिया एक फ़ाइल के बजाय स्क्रिप्ट इनलाइन देखने के लिए करता है।

विकल्प -nइनपुट का कारण बनता है (फ़ाइल या एक पाइप से एसटीडीआईएन) लाइन द्वारा लाइन पढ़ने के लिए।

ऑप्शन -lलाइन पढ़ने के बाद इनपुट रिकॉर्ड सेपरेटर (OS पर निर्भर, UNIX पर डिफ़ॉल्ट रूप से नई पट्टी) को स्ट्रिप्स करता है और इसे हर अंत में जोड़ता हैprint

विकल्प -aप्रत्येक इनपुट लाइन को व्हाट्सएप पर सरणी में विभाजित करने का कारण बनता है @F, और $F[-2]अंत से दूसरे तत्व की गिनती है, जो कि आप चाहते हैं। आप उपयोग भी कर सकते हैं $F[$#F-1], जहां $#Fसरणी का अंतिम सूचकांक है @F, जो थोड़ा कम पठनीय है।

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