मेरे पास यह फाइल है:
names average
john:15.02
Mark:09.63
James:12.58
मैं इसमें से केवल 10 से अधिक औसत निकालना चाहता हूं, इसलिए इस उदाहरण में आउटपुट होना चाहिए:
15.02
12.58
मेरे पास यह फाइल है:
names average
john:15.02
Mark:09.63
James:12.58
मैं इसमें से केवल 10 से अधिक औसत निकालना चाहता हूं, इसलिए इस उदाहरण में आउटपुट होना चाहिए:
15.02
12.58
जवाबों:
awk
awk -F: '{if($2>10)print$2}' <filename
-F:
- F
आईलिड सेपरेटर को सेट करता है:
{if($2>10)print$2}
- प्रत्येक पंक्ति के लिए, परीक्षण करें कि क्या 2
nd फ़ील्ड है >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
[[ $0 > 10 ]]
एक शाब्दिक तुलना के रूप में माना जाएगा - और किसी भी मामले में, गैर-पूर्णांक मानों के लिए बहुत मदद नहीं करता है
ग्रीप के साथ आपको नियमित अभिव्यक्ति के साथ काम करना होगा; जैसे
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 असंभव होगा।
':[1-9][0-9]\+\.\?'
- शाब्दिक दशमलव बिंदु \। वैकल्पिक है और अधिक से अधिक एक बार मिलान किया गया है? (@ मेरे RegEx के प्रतिबंध को इंगित करने के लिए मिठाई धन्यवाद।)