ব্যাশ ব্যবহার করে, আমি সংখ্যার একটি তালিকা থেকে কীভাবে গড়, সর্বাধিক এবং মিনিট সন্ধান করতে পারি?


18

আমার কাছে একটি সিরিজের পাইপযুক্ত গ্রেপস, আফস এবং সেড রয়েছে যা প্রতিটি লাইনে একটি করে সংখ্যার একটি তালিকা তৈরি করে। এটার মতো কিছু:

1.13
3.59 
1.23

আমি কীভাবে এটি এমন কোনও কিছুর সাথে পাইপ করতে পারি যা গড়, সর্বাধিক এবং নূন্যতম আউটপুট দেয়?


আপনি যদি গ্রেপ, আড্ডা এবং সিড একসাথে পাইপ করছেন তবে একই জিনিসটি প্রায়শই অর্কের অনুরোধে করা যেতে পারে।
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

উত্তর:


27

যেহেতু আপনি ইতিমধ্যে awk ব্যবহার করছেন

blahblahblah | awk '{if(min==""){min=max=$1}; if($1>max) {max=$1}; if($1<min) {min=$1}; total+=$1; count+=1} END {print total/count, max, min}'

ভাল লাগছে, এটা আমার পক্ষে কাজ করে!
জাভা রকি

আমি ভেবেছিলাম ইতিমধ্যে একটি বাইনারি থাকবে যা সংখ্যার একটি তালিকা গ্রহণ করে এবং আপনার জন্য গণনা, গড়, মিনিট, সর্বাধিক, টাইম 'সময়' ব্যবহার করার মতো।
জাভারকি

1
আমি কেবল উপরের awkপ্যাটার্নটি এমন /usr/local/bin/statsবা এর মধ্যে রেখে দেব এবং তারপরে এটি ব্যবহার করব blabla | stats
অ্যাকিউম্যানাস


0

সিম্পল-আরও রয়েছে, যা আর করতে পারে এমন প্রায় সব কিছু করতে পারে তবে কম কীস্ট্রোক সহ:

https://code.google.com/p/simple-r/

গড়, সর্বাধিক এবং ন্যূনতম গণনা করতে একজনকে একটি টাইপ করতে হবে:

r summary file.txt
r summary - < file.txt
cat file.txt | r summary -

0

@ ডারফকে টুপিটির একটি টিপ সহ:

perl -lane '$n=$F[0]; if(not defined $min){$min=$max=$n}; if($n>$max){$max=$n}; if($n<$min){$min=$n}; $total+=$n; $count+=1; END{print $total/$count." $max $min"}'

$F[0] প্রতিটি লাইনের প্রথম (0'তম) ক্ষেত্রের মান

যদি আপনার ইনপুট ডেটা কমা দ্বারা পৃথক করা হয় তবে -F,আগে পরিবর্তক যুক্ত করুন-lane

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.