किसी फ़ाइल से थ्रेशोल्ड से अधिक मान निकालने के लिए कैसे?


10

मेरे पास यह फाइल है:

names average
john:15.02
Mark:09.63
James:12.58

मैं इसमें से केवल 10 से अधिक औसत निकालना चाहता हूं, इसलिए इस उदाहरण में आउटपुट होना चाहिए:

15.02
12.58

जवाबों:


19

साथ में awk

awk -F: '{if($2>10)print$2}' <filename

स्पष्टीकरण

  • -F:- Fआईलिड सेपरेटर को सेट करता है:
  • {if($2>10)print$2}- प्रत्येक पंक्ति के लिए, परीक्षण करें कि क्या 2nd फ़ील्ड है >10, यदि ऐसा है printतो
  • <filename- शेल को खुली फाइल दें filename, awkऐसा करने से बेहतर है कि विषय पर स्टीफन चेजलस का उत्तर देखें

उदाहरण चलाते हैं

$ <filename awk -F: '{if($2>10)print$2}'
15.02
12.58

रिक्त स्थान जोड़ना और पैटर्न को कोष्ठक के बाहर रखना भी संभव है, इसलिए ये समान हैं - जो बाहर इंगित करने के लिए स्टीफन के लिए धन्यवाद :

awk -F: '{if($2>10)print$2}' <filename
awk -F: '{ if ( $2 > 10 ) print $2 }' <filename
awk -F: '$2>10{print$2}' <filename
awk -F: '$2 > 10 { print $2 }' <filename

आपकी मदद के लिए बहुत बहुत धन्यवाद, सही समाधान, क्या मैं इस स्थिति में केवल 'कमांड' कट 'और' grep '(बेसिक कमांड) का उपयोग कर सकता हूं, इस स्थिति में केवल 10 से बेहतर फ़ाइल प्रदर्शित करने के लिए ..
हाइकेल फज़ानी

मैं समझता हूं कि उर का समाधान, सही है, मदद के लिए बहुत बहुत धन्यवाद, मैं आपके सभी प्रयासों की सराहना करता हूं ..
हाइकेल फज़ानी

यह मत भूलो कि बैश [[ $0 > 10 ]]एक शाब्दिक तुलना के रूप में माना जाएगा - और किसी भी मामले में, गैर-पूर्णांक मानों के लिए बहुत मदद नहीं करता है
स्टीलड्राइवर

@ डार्टर्ट: मैं व्यक्तिगत रूप से एक्शन स्टेटमेंट्स से पहले पैटर्न लगाना पसंद करता हूं। जैसे: awk -F: '$ 2> 10 {प्रिंट $ 2}', क्योंकि यह मेरे लिए आसान लग रहा है और विस्तारित करने के लिए आसान है (उदाहरण $ 2> 10 && $ 2/100) ।
स्टीफन

3

ग्रीप के साथ आपको नियमित अभिव्यक्ति के साथ काम करना होगा; जैसे

grep -E ':[^0-9]*[1-9][0-9][0-9]*\.' file | cut -d':' -f2

जैसा कि sed के साथ:

sed -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file

लेकिन आदेश दिए गए डेटा पर RegEx का उपयोग त्रुटि प्रवण (मेरे अनुभव में) और पढ़ने में मुश्किल है ;-)।


बहुत चालाक! grep ':[1-9][0-9]\+\.' <file | cut -d: -f2और छोटा किया जा सकता है sed -n 's/.*:\([1-9][0-9]\+\..*\)/\1/p' <file। यह ध्यान देने योग्य है कि यह> 1,> 10,> 100 आदि के साथ ही काम करता है, उदाहरण के लिए> 20 असंभव होगा।
डेसर्ट

मैंने अपने RegEx में एक बग पाया है: एक दशमलव बिंदु के बिना संख्याओं के लिए RegEx होना चाहिए: ':[1-9][0-9]\+\.\?'- शाब्दिक दशमलव बिंदु \। वैकल्पिक है और अधिक से अधिक एक बार मिलान किया गया है? (@ मेरे RegEx के प्रतिबंध को इंगित करने के लिए मिठाई धन्यवाद।)
स्टीफन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.