একক কমান্ডে ন্যূনতম, সর্বোচ্চ, মধ্যমা এবং গড় সংখ্যাগুলির তালিকা পাওয়ার কোনও উপায় কি?


93

আমার কাছে একটি ফাইলের নম্বরের একটি তালিকা রয়েছে, প্রতি লাইনে একটি করে। আমি কীভাবে ন্যূনতম, সর্বোচ্চ, মধ্যম এবং গড় মান পেতে পারি? আমি ফলাফলগুলি ব্যাশ স্ক্রিপ্টে ব্যবহার করতে চাই।

যদিও আমার তাত্ক্ষণিক পরিস্থিতিটি পূর্ণসংখ্যার জন্য, ভাসমান-পয়েন্ট সংখ্যাগুলির সমাধানটি লাইনের নিচে কার্যকর হবে তবে একটি সহজ পূর্ণসংখ্যার পদ্ধতিটি ভাল।


উত্তর:


50

আপনি আর প্রোগ্রামিং ভাষা ব্যবহার করতে পারেন ।

এখানে একটি দ্রুত এবং নোংরা আর স্ক্রিপ্ট রয়েছে:

#! /usr/bin/env Rscript
d<-scan("stdin", quiet=TRUE)
cat(min(d), max(d), median(d), mean(d), sep="\n")

উল্লেখ্য "stdin"মধ্যে scanযেটি মান ইনপুট থেকে পড়া একটি বিশেষ ফাইলের নাম (যে পাইপ বা পুনঃনির্দেশগুলি থেকে অর্থ)।

এখন আপনি স্ট্যান্ডিনের মাধ্যমে আপনার ডেটা আর স্ক্রিপ্টে পুনর্নির্দেশ করতে পারেন:

$ cat datafile
1
2
4
$ ./mmmm.r < datafile
1
4
2
2.333333

ভাসমান পয়েন্টগুলির জন্যও কাজ করে:

$ cat datafile2
1.1
2.2
4.4
$ ./mmmm.r < datafile2
1.1
4.4
2.2
2.566667

আপনি যদি কোনও আর স্ক্রিপ্ট ফাইল লিখতে না চান তবে আপনি কমান্ড লাইনে একটি সত্য ওয়ান-লাইনার (কেবল পঠনযোগ্যতার জন্য লাইনব্রেক সহ) আহ্বান করতে পারেন Rscript:

$ Rscript -e 'd<-scan("stdin", quiet=TRUE)' \
          -e 'cat(min(d), max(d), median(d), mean(d), sep="\n")' < datafile
1
4
2
2.333333

সূক্ষ্ম আর ম্যানুয়াল পড়ুন http://cran.r-project.org/manouts.html এ

দুর্ভাগ্যক্রমে সম্পূর্ণ রেফারেন্স কেবল পিডিএফ এ উপলব্ধ। রেফারেন্সটি পড়ার আর একটি উপায় হল ?topicnameএকটি ইন্টারেক্টিভ আর সেশনের প্রম্পটে টাইপ করা।


সম্পূর্ণতার জন্য: একটি আর কমান্ড রয়েছে যা আপনার পছন্দসই সমস্ত মানকে আরও বেশি দেয়। দুর্ভাগ্যক্রমে একটি মানব বান্ধব বিন্যাসে যা প্রোগ্রামিকভাবে বিশ্লেষণ করা শক্ত।

> summary(c(1,2,4))
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  1.000   1.500   2.000   2.333   3.000   4.000 

1
এটি আকর্ষণীয় দেখায় .. আগামীকাল আমি এটিকে আরও ঘনিষ্ঠভাবে দেখব .. উইকিপিডিয়া পৃষ্ঠার উপর ভিত্তি করে, "স্ট্যাটিস্টিস্টিয়ানদের মধ্যে আর একটি বাস্তবসম্মত মান হয়ে উঠেছে" ... বেশিরভাগ ক্ষেত্রেই এটি একটি উল্লেখযোগ্য প্রশংসাসূচক ... আমি অভিনেত্রী এটিকে ডাউনলোড করার চেষ্টা করেছি অন্য দিন (আমি এটি উল্লিখিত দেখতে পেয়েছিলাম), তবে আমি উবুন্টু
রেপোতে

10
উবুন্টুতে (এবং ডেবিয়ান?) প্যাকেজের নাম দেওয়া হয়েছে r-base
লেসমানা

ধন্যবাদ, আমার এই নামের রেফারেন্সের দরকার ছিল :) আমি সিনাপটিক অনুসন্ধান ক্ষেত্রে আর-র কথা ভাবিনি এবং এটি কোনও একক চরিত্রে অভিনয় করে না ... আমি এখন এটি চেষ্টা করে দেখেছি এবং এটি আদর্শ দেখাচ্ছে ... Rভাষা এই পরিস্থিতিতে আমার প্রয়োজনের জন্য স্পষ্টতই সেরা ... গিলসের উত্তর অনুসারে, Rscriptস্ক্রিপ্ট ফাইলগুলিতে ইন্টারফেসটি সবচেয়ে উপযুক্ত (বনাম R, যা ইন্টারেক্টিভ ইন্টারফেস) ... এবং টার্মিনালে আর একটি সহজ ক্যালকুলেটর তৈরি করে , বা পরীক্ষার পরিবেশ (অজগর মত :)
পিটার.ও

(+1) আমি আরকে ভালবাসি I
Dason

6
বা কেবলcat datafile | Rscript -e 'print(summary(scan("stdin")));'
shabbychef

52

আমি সংখ্যার উপাত্তের একক কলামের সংখ্যার যোগফল, ডেটা গণনা, ন্যূনতম ডাটাম, সর্বাধিক ডাটাম, গড় এবং মাঝারিটি দিতে নেতিবাচকভাবে কিছুটা বিশ্রী প্রোগ্রাম রাখি (নেতিবাচক সংখ্যা সহ):

#!/bin/sh
sort -n | awk '
  BEGIN {
    c = 0;
    sum = 0;
  }
  $1 ~ /^(\-)?[0-9]*(\.[0-9]*)?$/ {
    a[c++] = $1;
    sum += $1;
  }
  END {
    ave = sum / c;
    if( (c % 2) == 1 ) {
      median = a[ int(c/2) ];
    } else {
      median = ( a[c/2] + a[c/2-1] ) / 2;
    }
    OFS="\t";
    print sum, c, ave, median, a[0], a[c-1];
  }
'

উপরের স্ক্রিপ্টটি স্টিডিন থেকে পড়ে এবং একক লাইনে আউটপুটটির ট্যাব-বিভক্ত কলামগুলি মুদ্রণ করে।


1
আহা! এটি সুস্পষ্ট (এখন যে আমি আপনার অজস স্ক্রিপ্টটি দেখেছি :) ... অ্যারে বাছাই করার সময় ন্যূনতম এবং সর্বাধিক পরীক্ষা করার দরকার নেই :) এবং এর অর্থ হ'ল NR==1(একটি অকেজো-ব্যবহার-এর- যদি) সর্বনিম্ন / সর্বাধিক পরীক্ষাগুলির পাশাপাশি, সমস্ত সূচনাটি শুরু করা যায় BEGIN বিভাগে (ভাল!) ... মন্তব্যের জন্য অনুমতি
দেওয়াও

কেবল একটি চিন্তাভাবনা .. সম্ভবত মন্তব্যকে অস্বীকার করার চেয়ে কেবল সংখ্যার অনুমতি দেওয়া ভাল (তবে এটি আপনার প্রয়োজনীয়তা নির্ভর করে) ..
পিটার.ও

1
প্রযুক্তিগতভাবে, awk"নতুন" ভেরিয়েবলগুলি শূন্য হিসাবে ধরে নেবে, সুতরাং এই ক্ষেত্রে BEGIN{}বিভাগটি অপ্রয়োজনীয়। আমি মোড়ক স্থির করেছি (লাইন বিরতিতে বাঁচার দরকার নেই)। আমি লাইনটি OFS="\t"পরিষ্কার করতে printএবং @ পিটার.ওর দ্বিতীয় মন্তব্যটি প্রয়োগ করেছি। (হ্যাঁ, আমার রেজেক্স অনুমতি দেয় .তবে এটি awkব্যাখ্যাযোগ্য হিসাবে 0এটি গ্রহণযোগ্য))
অ্যাডাম কাটজ

1
@ অ্যাডামক্যাটজ - এগুলি দুর্দান্ত পরিবর্তন, তবে যেমনটি দাঁড়িয়েছে, আমি প্রোগ্রামটি লিখিনি। আমার awkস্ক্রিপ্ট এখন যথেষ্ট আলাদা। আমার প্রায় মনে হয়েছে আপনার উপরের প্রোগ্রামটির জন্য ক্রেডিট নেওয়া উচিত, যেখানে creditণ দেওয়ার জন্য creditণ দেওয়ার জন্য।
ব্রুস এডিগার 15'15

1
আমি গড় নামে একটি পার্ল স্ক্রিপ্ট লিখেছিলাম যা এটি এবং আরও কিছু করে, যাইহোক
অ্যাডাম কাটজ

47

জিএনইউ দাতাম্যাশ সহ :

$ printf '1\n2\n4\n' | datamash max 1 min 1 mean 1 median 1
4   1   2.3333333333333 2


3
brew install datamashআপনি যদি হ্যামব্রু ইনস্টল করে থাকেন তবে আপনাকে ম্যাকোসের জন্য একটি ওয়ার্কিং সংস্করণ দেয়।
প্রতি লন্ডবার্গ

19

ন্যূনতম, সর্বাধিক এবং গড় খুব ভাল অ্যাজকের সাথে পাওয়া:

% echo -e '6\n2\n4\n3\n1' | awk 'NR == 1 { max=$1; min=$1; sum=0 }
   { if ($1>max) max=$1; if ($1<min) min=$1; sum+=$1;}
   END {printf "Min: %d\tMax: %d\tAverage: %f\n", min, max, sum/NR}'
Min: 1  Max: 6  Average: 3,200000

মিডিয়েন গণনা করা কিছুটা জটিল, কারণ আপনার সংখ্যাগুলি বাছাই করতে হবে এবং কিছুক্ষণের জন্য এগুলি সমস্ত স্মৃতিতে সঞ্চয় করতে হবে বা তাদের দু'বার পড়তে হবে (প্রথম বার তাদের গণনা করার জন্য, দ্বিতীয় - মধ্যমানের মান পেতে)। এখানে মেমরিতে সমস্ত সংখ্যা সঞ্চয় করে রাখার উদাহরণ রয়েছে:

% echo -e '6\n2\n4\n3\n1' | sort -n | awk '{arr[NR]=$1}
   END { if (NR%2==1) print arr[(NR+1)/2]; else print (arr[NR/2]+arr[NR/2+1])/2}' 
3

ধন্যবাদ ... আপনার উদাহরণটি আমার জন্য এক উত্তম নেতৃত্ব, এটি আমার জন্য .. আমি এটিকে কিছুটা টুইট করেছি এবং দু'জনকে একসাথে রেখেছি (অ্যাজকের অনুভূতি পেয়ে) ... আমি asortপাইপের বদলে আর্ক ব্যবহার করেছি sort, এবং এটি পূর্ণসংখ্যা এবং দশমিকগুলি সঠিকভাবে সাজান বলে মনে হচ্ছে .. এটি আমার ফলাফলের সংস্করণ পেস্ট.বুন্টু . com/612674 এর একটি লিঙ্ক ... (এবং কিমের প্রতি একটি নোট: আমি কয়েক ঘন্টা ধরে অ্যাডকের সাথে পরীক্ষা নিরীক্ষা করছি) ব্যক্তিগত স্বার্থের উদাহরণের সাথে কাজ করা আমার পক্ষে আরও ভাল) ... পাঠকদের কাছে একটি সাধারণ নোট: আমি এখনও অন্য পদ্ধতিগুলি দেখতে আগ্রহী। আরও কমপ্যাক্ট আরও ভাল। আমি কিছুক্ষণ অপেক্ষা করব ...
পিটার.ও


17

নূন্যতম:

jq -s min

সর্বাধিক:

jq -s max

মধ্যমা:

sort -n|awk '{a[NR]=$0}END{print(NR%2==1)?a[int(NR/2)+1]:(a[NR/2]+a[NR/2+1])/2}'

গড়:

jq -s add/length

ইন ( ) বিকল্প JSON হিসেবে প্রতিটি লাইনে পার্স পর ইনপুট লাইন জন্য একটি অ্যারের তৈরি করে, বা এই ক্ষেত্রে একটি সংখ্যা হিসাবে।jq-s--slurp


3
জেকিউ দ্রবণটি একটি বিশেষ উল্লেখের উপযুক্ত, যেহেতু এটি সংক্রামিত এবং অন-সুস্পষ্ট উপায়ে সরঞ্জামটির পুনরায় উদ্দেশ্য করে।
jplindstrom

1
সুন্দর! আশা করি আমি +2 দিতে পারি
21 জুলাইতে আরএএসজি

7
nums=$(<file.txt); 
list=(`for n in $nums; do printf "%015.06f\n" $n; done | sort -n`); 
echo min ${list[0]}; 
echo max ${list[${#list[*]}-1]}; 
echo median ${list[${#list[*]}/2]};

echo file.txtহয়তো পুরোপুরি ঠিক, দেখে মনে হচ্ছে নাcat
malat

6

এবং মিডল সহ একটি পার্ল ওয়ান (দীর্ঘ) লাইনার:

cat numbers.txt \
| perl -M'List::Util qw(sum max min)' -MPOSIX -0777 -a -ne 'printf "%-7s : %d\n"x4, "Min", min(@F), "Max", max(@F), "Average", sum(@F)/@F,  "Median", sum( (sort {$a<=>$b} @F)[ int( $#F/2 ), ceil( $#F/2 ) ] )/2;'

ব্যবহৃত বিশেষ বিকল্পগুলি হ'ল:

  • -0777 : লাইন বাই লাইনের পরিবর্তে পুরো ফাইলটি একবারে পড়ুন
  • -a : @F অ্যারেতে অটোস্প্লিট

একই জিনিসটির আরও পাঠযোগ্য স্ক্রিপ্ট সংস্করণটি হ'ল:

#!/usr/bin/perl

use List::Util qw(sum max min);
use POSIX;

@F=<>;

printf "%-7s : %d\n" x 4,
    "Min", min(@F),
    "Max", max(@F),
    "Average", sum(@F)/@F,
    "Median", sum( (sort {$a<=>$b} @F)[ int( $#F/2 ), ceil( $#F/2 ) ] )/2;

যদি আপনি দশমিক চান, তবে এর %dমতো কিছু দিয়ে প্রতিস্থাপন করুন %.2f


6

সরল-আর উত্তর:

r summary file.txt
r -e 'min(d); max(d); median(d); mean(d)' file.txt

এটি পরিসংখ্যান বিশ্লেষণকে সহজ করার জন্য আর পরিবেশকে ব্যবহার করে।


5

এই পৃষ্ঠায় কেবল বিভিন্ন বিকল্প উপস্থাপনের স্বার্থে, এখানে আরও দুটি উপায় দেওয়া হয়েছে:

1: অষ্টক

  • জিএনইউ অষ্টাভ হ'ল একটি উচ্চ-স্তরের বর্ণিত ভাষা, যা মূলত সংখ্যাসূচক গণনার জন্য উদ্দিষ্ট। এটি লিনিয়ার এবং অ-লাইন সংক্রান্ত সমস্যার সংখ্যাগত সমাধান এবং অন্যান্য সংখ্যাসূচক পরীক্ষা-নিরীক্ষার জন্য ক্ষমতা সরবরাহ করে।

এখানে একটি চটজলদি অষ্টক উদাহরণ।

octave -q --eval 'A=1:10;
  printf ("# %f\t%f\t%f\t%f\n", min(A), max(A), median(A), mean(A));'  
# 1.000000        10.000000       5.500000        5.500000

2: বাশ + একক উদ্দেশ্যমূলক সরঞ্জাম

ভাসমান-পয়েন্ট সংখ্যা হ্যান্ডেল করার জন্য বাশার জন্য, এই স্ক্রিপ্টটি numprocessএবং numaverageপ্যাকেজটি ব্যবহার করে num-utils

গীত। আমি একটি যুক্তিসঙ্গত চেহারা ছিল bc, কিন্তু এই বিশেষ কাজের জন্য, এটি কি awkকরে বাইরে কিছু দেয় না । এটি ('বিসি' স্টেটে 'সি' হিসাবে) একটি ক্যালকুলেটর — এমন একটি ক্যালকুলেটর যার জন্য অনেক বেশি প্রোগ্রামিং প্রয়োজন awkএবং এই বাশ স্ক্রিপ্ট ...


arr=($(sort -n "LIST" |tee >(numaverage 2>/dev/null >stats.avg) ))
cnt=${#arr[@]}; ((cnt==0)) && { echo -e "0\t0\t0\t0\t0"; exit; }
mid=$((cnt/2)); 
if [[ ${cnt#${cnt%?}} == [02468] ]] 
   then med=$( echo -n "${arr[mid-1]}" |numprocess /+${arr[mid]},%2/ )
   else med=${arr[mid]}; 
fi     #  count   min       max           median        average
echo -ne "$cnt\t${arr[0]}\t${arr[cnt-1]}\t$med\t"; cat stats.avg 

4

আমি দ্বিতীয় লেসমানার আর এর পছন্দ পছন্দ করব এবং আমার প্রথম আর প্রোগ্রাম দেব offer এটি স্ট্যান্ডার্ড ইনপুটটিতে প্রতি লাইনে একটি নম্বর পড়ে এবং স্ট্যান্ডার্ড আউটপুটে ফাঁক করে চারটি সংখ্যা (ন্যূনতম, সর্বোচ্চ, গড়, মধ্যম) লেখায়।

#!/usr/bin/env Rscript
a <- scan(file("stdin"), c(0), quiet=TRUE);
cat(min(a), max(a), mean(a), median(a), "\n");

"দ্বিতীয়" (এটি আশ্বাস দেওয়ার) জন্য ধন্যবাদ ... আপনার উদাহরণটি কার্যকর ছিল, কারণ আমি সরাসরি বুঝতে পারিনি যে Rএটি ইন্টারেক্টিভ ইন্টারফেস, এবং Rscriptস্ক্রিপ্টযুক্ত ফাইলগুলি চালিত করে, যা হ্যাশ-ব্যাংয়ের উদাহরণ অনুসারে কার্যকর হতে পারে , বা বাশ স্ক্রিপ্টের মধ্যে থেকে আহবান করা হয়েছে .. স্ক্রিপ্টগুলি কমান্ডলাইন আরোগুলি পরিচালনা করতে পারে (উদাঃ স্ট্যাকওভারফ্লো . com/উকশনস /2045706/ …) সুতরাং এটি দুর্দান্ত দেখাচ্ছে ... এছাড়াও আর এক্সপ্রেশনগুলি ব্যাশের মাধ্যমে ব্যবহার করা যেতে পারে -e... তবে আমি কীভাবে এর Rসাথে তুলনা করি তা অবাক করে দিয়েছি bc...
পিটার.ও

2

নীচে sort/ awkটেন্ডেম এটি করে:

sort -n | awk '{a[i++]=$0;s+=$0}END{print a[0],a[i-1],(a[int(i/2)]+a[int((i-1)/2)])/2,s/i}'

(যদি মান গণনা সমান হয় তবে এটি দুটি কেন্দ্রীয় মান হিসাবে গড় হিসাবে গণনা করে)


2

ব্রুসের কোড থেকে সংকেত নেওয়া, এখানে আরও কার্যকর বাস্তবায়ন দেওয়া হচ্ছে যা পুরো ডেটা মেমরিতে রাখে না। প্রশ্নে বর্ণিত হিসাবে, এটি ধরে নিয়েছে যে ইনপুট ফাইলটিতে প্রতি লাইনে একটি সংখ্যা রয়েছে (সর্বাধিক)। এটি ইনপুট ফাইলের লাইনগুলি গণনা করে যা একটি যোগ্যতা নম্বর ধারণ করে এবং awkসাজানো ডেটা (পূর্ববর্তী) সহ কমান্ডে গণনাটি পাস করে । সুতরাং, উদাহরণস্বরূপ, যদি ফাইলটি থাকে

6.0
4.2
8.3
9.5
1.7

তারপরে ইনপুটটি awkআসলে

5
1.7
4.2
6.0
8.3
9.5

তারপরে awkস্ক্রিপ্টটি NR==1কোড ব্লকের মধ্যে ডেটা গণনা ক্যাপচার করে এবং মধ্যম মানটি (বা দুটি মাঝারি মানের, যা মধ্যম উত্থাপনের গড় হয়) সেগুলি দেখলে এটি সংরক্ষণ করে।

FILENAME="Salaries.csv"

(awk 'BEGIN {c=0} $1 ~ /^[-0-9]*(\.[0-9]*)?$/ {c=c+1;} END {print c;}' "$FILENAME"; \
        sort -n "$FILENAME") | awk '
  BEGIN {
    c = 0
    sum = 0
    med1_loc = 0
    med2_loc = 0
    med1_val = 0
    med2_val = 0
    min = 0
    max = 0
  }

  NR==1 {
    LINES = $1
    # We check whether numlines is even or odd so that we keep only
    # the locations in the array where the median might be.
    if (LINES%2==0) {med1_loc = LINES/2-1; med2_loc = med1_loc+1;}
    if (LINES%2!=0) {med1_loc = med2_loc = (LINES-1)/2;}
  }

  $1 ~ /^[-0-9]*(\.[0-9]*)?$/  &&  NR!=1 {
    # setting min value
    if (c==0) {min = $1;}
    # middle two values in array
    if (c==med1_loc) {med1_val = $1;}
    if (c==med2_loc) {med2_val = $1;}
    c++
    sum += $1
    max = $1
  }
  END {
    ave = sum / c
    median = (med1_val + med2_val ) / 2
    print "sum:" sum
    print "count:" c
    print "mean:" ave
    print "median:" median
    print "min:" min
    print "max:" max
  }
'

ইউনিক্স ও লিনাক্সে স্বাগতম! প্রথম পোস্টের জন্য ভাল কাজ। (1) যদিও এটি প্রশ্নের উত্তর দিতে পারে, আপনি কীভাবে / কেন এটি করেন তা ব্যাখ্যা করতে পারলে আরও ভাল উত্তর হবে। সাইটের মান গত চার বছরে বিকশিত হয়েছে; কেবলমাত্র কোড-উত্তরগুলি ২০১১ সালে গ্রহণযোগ্য ছিল, তবে আমরা এখন এমন বিস্তৃত উত্তর পছন্দ করি যা আরও ব্যাখ্যা এবং প্রসঙ্গ সরবরাহ করে। আমি আপনাকে পুরো লিপিটি ব্যাখ্যা করতে বলছি না; আপনি যে অংশগুলি পরিবর্তন করেছেন কেবল (তবে আপনি যদি পুরো স্ক্রিপ্টটি ব্যাখ্যা করতে চান তবে এটিও ঠিক আছে)। (বিটিডাব্লু, আমি এটি ঠিকঠাক বুঝতে পেরেছি; আমি আমাদের কম অভিজ্ঞ ব্যবহারকারীদের পক্ষ থেকে জিজ্ঞাসা করছি)) ... (চালনা)
জি-ম্যান

(চালিয়ে যাওয়া) ... অনুগ্রহ করে মন্তব্যে সাড়া দিবেন না; আপনার উত্তরটি আরও পরিষ্কার এবং আরও পরিপূর্ণ করতে সম্পাদনা করুন। (২) স্ক্রিপ্টটি স্থির করা যাতে মেমরির পুরো অ্যারে ধরে রাখার দরকার না হয় তবে এটি একটি ভাল উন্নতি, তবে আপনার কাছে তিনটি অপ্রয়োজনীয় catকমান্ড থাকলে আপনার সংস্করণটি "আরও কার্যকর" বলা উপযুক্ত কিনা তা আমি নিশ্চিত নই ; দেখতে UUOC । … (চালিয়ে যাওয়া)
জি ম্যান

(চালিয়ে যাওয়া) ... (3) আপনার কোডটি নিরাপদ, যেহেতু আপনি সেট করেছেন FILENAMEএবং আপনি কী সেট করেছেন তা আপনি জানেন তবে সাধারণভাবে, আপনার সর্বদা শেল ভেরিয়েবলগুলি উদ্ধৃত করা উচিত যদি না আপনার কাছে উপযুক্ত কারণ না থাকে এবং আপনি নিশ্চিত আপনি জানেন যে আপনি কি করছেন। (৪) আপনার উত্তর এবং ব্রুস উভয়ই নেতিবাচক ইনপুট উপেক্ষা করে (যেমন, সংখ্যাগুলি দিয়ে শুরু করা -); এটি সঠিক বা কাঙ্ক্ষিত আচরণ এটির পরামর্শ দেওয়ার জন্য প্রশ্নে কিছুই নেই। খারাপ লাগবে না; এটি চার বছরেরও বেশি সময় পেরিয়ে গেছে এবং স্পষ্টতই আমি প্রথম ব্যক্তি যিনি খেয়াল করেছেন।
জি ম্যান

পরামর্শ অনুযায়ী সম্পাদনা করা। ক্যাট কমান্ডের ওভারহেড সম্পর্কে জানতেন না। এটি সর্বদা একক ফাইলগুলি স্ট্রিম করতে ব্যবহার করে। আমাকে ইউইউওসি সম্পর্কে বলার জন্য ধন্যবাদ .....
রাহুল আগরওয়াল

ভাল. আমি তৃতীয়টিকে মুছে catফেলে ব্যাখ্যাটিতে যুক্ত করেছি।
জি ম্যান

2

numএকটি ক্ষুদ্র হয় awkমোড়কের যা ঠিক এই এবং আরো, যেমন করে

$ echo "1 2 3 4 5 6 7 8 9" | num max
9
$ echo "1 2 3 4 5 6 7 8 9" | num min max median mean
..and so on

এটি আপনাকে আল্ট্রা-পোর্টেবল অ্যাজকে চাকা পুনর্বিবেচনা থেকে বাঁচায়। ডক্স উপরে দেওয়া হয়, এবং সরাসরি লিঙ্ক এখানে (এছাড়াও চেক GitHub পৃষ্ঠা )।


ব্যবহারকারী কম্পিউটারে মৃত্যুদন্ড কার্যকর করার জন্য অস্পষ্ট ওয়েব কোডের লিঙ্কগুলি আমার কাছে খারাপ ধারণা বলে মনে হচ্ছে। সাইট কোড রয়েছে এখানে থাকা

কোথায় এই "battletested" কোড আরোপ করা হচ্ছে আগে অনুষ্ঠিত হয় GitHub সব 4 মাস আগে? আমি এটি অত্যন্ত সন্দেহজনক বলে মনে করি যে গিথুবের লিঙ্কটি কার্ল ডাউনলোড কমান্ড থেকে খোসা ছাড়তে হবে। বিকাশকারীকে কীভাবে আর্থিক অনুদান দেওয়া যায় তা খুঁজে পাওয়া আরও অনেক সহজ। দেখে মনে হচ্ছে এই কোডটির লেখক ভয় পেয়েছেন যে লোকেরা গিথুব এ যেতে পারে এবং (প্রায় অস্তিত্বহীন) ইতিহাস এবং পরিসংখ্যানগুলিতে নজর দিতে পারে। অর্থ সংগ্রহের চেষ্টা বাদ দিয়ে এই যুদ্ধকে আদৌ পরীক্ষিত করার কোনও কারণ আছে কি?
অ্যান্থন

@ বাইনারিজেবা: আপডেট হয়েছে
22:46

@ অ্যানথন ওকে, 'বেলটেস্টড' অংশটি সরানো হয়েছে। আমি মনে করি না এটি ষড়যন্ত্র এফইউডি করার জায়গা।
কোডারফসালভেশন


1

cat/pythonএকমাত্র সমাধান - খালি ইনপুট প্রমাণ নয়!

cat data |  python3 -c "import fileinput as FI,statistics as STAT; i = [int(l) for l in FI.input()]; print('min:', min(i), ' max: ', max(i), ' avg: ', STAT.mean(i), ' median: ', STAT.median(i))"

আপনি মিডিয়ানটি
পিটার.ও

@ পিটার.ও ঠিক আছে।
রাভউজডিলা

পরিসংখ্যান মডিউল প্রয়োজন পাইথন সংস্করণ> = 3.4
Peter.O

@ পিটার.ও আপনি সঠিক - এটি কি সমস্যা?
রাভউজডিলা

আপনার কাছে অজগর সংস্করণ না থাকলে সমস্যা নেই। এটি কেবল এটি কম পোর্টেবল করে তোলে।
পিটার.ও

0

আপনি যদি শীতল বা চতুর হওয়ার চেয়ে ইউটিলিটিতে আরও আগ্রহী হন তবে perlতার চেয়ে সহজ বিকল্প awk। সামঞ্জস্যপূর্ণ আচরণের সাথে এটি প্রতিটি * নিক্সে থাকবে এবং উইন্ডোতে ইনস্টল করা সহজ এবং বিনামূল্যে। আমি মনে করি এটি তুলনায় কম ক্রিপ্টিকও awk, এবং এমন কিছু পরিসংখ্যান মডিউল থাকবে যা আপনি নিজের হাতে লেখার এবং আর এর মতো কিছুর মধ্যে একটি অর্ধেক বাড়ি চাইতেন wanted আমার মোটামুটি অনিরীক্ষিত (আসলে আমি জানি এটিতে বাগ রয়েছে তবে এটি আমার উদ্দেশ্যে কাজ করে) ) perlস্ক্রিপ্টটি লিখতে প্রায় এক মিনিট সময় নিয়েছিল এবং আমি অনুমান করতে পারি যে একমাত্র ক্রিপ্টিক অংশটি while(<>)হ'ল এটি খুব দরকারী শর্টহ্যান্ড, যার অর্থ ফাইল (গুলি) কমান্ড লাইন আর্গুমেন্ট হিসাবে পাস হয়েছে, একবারে একটি লাইন পড়ে এবং রাখবে বিশেষ পরিবর্তনশীল মধ্যে লাইন$_। সুতরাং আপনি এটি count.pl নামক একটি ফাইলের মধ্যে রাখতে পারেন এবং এটি হিসাবে চালাতে পারেন perl count.pl myfile। এটি বাদে এটি কী চলছে তা বেদনাদায়কভাবে স্পষ্ট হওয়া উচিত।

$max = 0;
while (<>) {
 $sum = $sum + $_;
 $max = $_ if ($_ > $max);
 $count++;
}
$avg=$sum/$count;
print "$count numbers total=$sum max=$max mean=$avg\n";

3
আপনি মধ্যস্থতা
পিটার.ও

0
function median()
{
    declare -a nums=($(cat))
    printf '%s\n' "${nums[@]}" | sort -n | tail -n $((${#nums[@]} / 2 + 1)) | head -n 1
}  

উপরের কোডটি কীভাবে প্রশ্নের উত্তর দেয় তার একটি ব্যাখ্যা থাকলে এই উত্তরটি কার্যকর হবে , উদাহরণস্বরূপ, আপনার বলা উচিত যে এটি ব্যাশকে shঅনুবাদক হিসাবে ব্যবহার করছে না (নয় )। ফাইল থেকে অ্যারেতে কীভাবে ডেটা পাঠ করা হয় তা নিয়েও একটি সমস্যা রয়েছে।
অ্যান্টনি জিওগেইগান 19 ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.