Согласно моему (интерпретация, по крайней мере) страницы справочника, -fs
опция на ppmquant
не берет аргумент; ncolors
аргумент является отдельным. Отделитесь -fs 223
. Не уверенный, будет ли это заботиться об ошибке магического числа также.
awk 'BEGIN{print "Pricerange\tpricerangecount"}
NR>1 {cur=int($0/10000); A[cur]+=1; if (cur>m) m=cur; }
END {for(i=0;i<=m;i++) printf("%d-%d:\t%d\n",i*10000, (i+1)*10000, A[i])}'
Я обычно использую gsl-histogram
от GNU Научный Пакет библиотеки. Как острота, поскольку это входит в Ваш случай (без симпатичной печати, предыдущие решения в порядке, и у меня есть upvoted их):
tail -n+2 Input.txt | gsl-histogram 0 40000 4
Perl:
perl -ne'$h{int$_/10000}++;END{printf"%d0000-%d0000 %d\n",$_,$_+1,$h{$_}for sort{$a<=>$b}keys%h}'
расширенный:
while(<>) { #read each line (-n)
$h{int $_/10000}++; #count buckets
}
for (sort {$a<=>$b} keys %h) { #sort numerically
printf "%d0000-%d0000 %d\n", $_, $_+1, $h{$_};
}
Вот coreutils и dc альтернатива:
<Input.txt tail -n +2 | while read; do <<< "$REPLY 10000 /p" | dc; done | sort -n | uniq -c \
| while read cnt rng; do
printf "%-15s %-15s\n" \
$(<<< "$rng 10000 *p" | dc)-$(<<< "$rng 1 + 10000 *p" | dc) $cnt
done > Output.txt
Output.txt:
0-10000 2
10000-20000 3
20000-30000 1
30000-40000 2
shopt -s extglob; N=10000; while read n;do [[ $n = *(0-9) ]]&&((a[n/N]++));done; for i in ${!a[*]};do echo $((i*N))-$(((i+1)*N-1)) $((a[i]));done
– Nahuel Fouilleul
19.10.2012, 19:08
uniq
рассчитывает случаи, настолько сортирующие, необходим. Необходимо отправить предложение как ответ.
– Thor
20.10.2012, 03:57
Хотя удар не является хорошим решением, после комментария, здесь другое решение
N=10000
while read n;do [[ $n =~ ^[0-9]*$ ]]&&((a[n/N]++));done
for i in ${!a[*]};do echo $((i*N))-$(((i+1)*N-1)) $((a[i]));done
это будет быстрее на маленьких файлах, потому что нет издержек порождения нового процесса, но менее эффективны на больших файлах.