আমার এই ফাইলটি রয়েছে:
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
য় ক্ষেত্র >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 -n 's/.*:[^0-9]*\([1-9][0-9][0-9]*\..*\)/\1/p' file
তবে অর্ডার করা ডেটাতে রেজেক্স ব্যবহার করা ত্রুটিযুক্ত প্রবণ (আমার অভিজ্ঞতায়) এবং পড়তে অসুবিধা হয় ;-)।
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]\+\.\?'
- আক্ষরিক দশমিক বিন্দু \ \ optionচ্ছিক এবং একসাথে একবার মিলিত হয় ?. (@ আমার রেজিএক্সের সীমাবদ্ধতার প্রতিশ্রুতি দেওয়ার জন্য ডেজারেট ধন্যবাদ।)