plot() { cat - | gawk 'BEGIN {OFS=FS="\t"; MinCost=1000000; MaxAtt=0;} /#/ { next} { N++; Costs[N]=$1; Attain[N]=$2 if (NR> Bins) { MinCost = $1 < MinCost ? $1 : MinCost MaxAtt = $2 > MaxAtt ? $2 : MaxAtt } } ! (NR % Bins) { N=0 if (NR> Bins) report(); delete Costs delete Attain } END { if (N>Bins/2) report(); } function report() { print ++Bin*Bins, stats(Costs), stats(Attain), maxmin(Attain,Costs), MinCost, MaxAtt } function maxmin(attain,costs, a,amax,c,cmin) { a=asort(attain) amax=attain[a] c=asort(costs) cmin=costs[1] return cmin OFS amax } function stats(nums, n,med,spr) { n= asort(nums); med=nums[int(n*0.5)]; spr=nums[int(n*0.75)]; return med OFS spr - med } ' Bins=100 Max=30000 } for i in KEYS-NoLimits.csv KEYS-WithLimits.csv; do cat $i | plot > dat echo $i gnuplot< dat echo $i gnuplot<