частота происшествия

Согласно моему (интерпретация, по крайней мере) страницы справочника, -fs опция на ppmquant не берет аргумент; ncolors аргумент является отдельным. Отделитесь -fs 223. Не уверенный, будет ли это заботиться об ошибке магического числа также.

2
19.10.2012, 08:37
5 ответов
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])}' 
7
27.01.2020, 21:49
  • 1
    Небольшое косметическое изменение предлагается: awk 'НАЧИНАЮТСЯ {печатают "Pricerange\tpricerangecount"} {cur=int ($0/10000); [дворняга] + =1; если (дворняга> m) m=cur;} КОНЕЦ {для (i=0; я <=m; я ++), printf (" %d-% d:\t%d\n", i*10000, (i+1) *10000, [я])}' –  tink 19.10.2012, 00:02
  • 2
    @tink, право и мы должны пропустить первую строку во входе также. Но затем больше удобно острота. команда :-) –  dubiousjim 19.10.2012, 00:05

Я обычно использую gsl-histogram от GNU Научный Пакет библиотеки. Как острота, поскольку это входит в Ваш случай (без симпатичной печати, предыдущие решения в порядке, и у меня есть upvoted их):

  tail -n+2 Input.txt | gsl-histogram 0 40000 4
4
27.01.2020, 21:49
  • 1
    Хороший. Для пропуска заголовка, это должно быть tail -n+2. –  Thor 19.10.2012, 18:54

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{$_};
}
3
27.01.2020, 21:49

Вот 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
2
27.01.2020, 21:49
  • 1
    там не является никакой потребностью отсортировать; здесь решение с ударом 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
  • 2
    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

это будет быстрее на маленьких файлах, потому что нет издержек порождения нового процесса, но менее эффективны на больших файлах.

1
27.01.2020, 21:49

Теги

Похожие вопросы