uniq -c не может считать уникальные строки

Я пытаюсь подсчитать уникальные вхождения чисел в 3-м столбце текстового файла, очень простая команда:

awk 'BEGIN {FS = "\t"}; {print $3}' bisulfite_seq_set0_v_set1.tsv | uniq -c

который должен сказать что-то вроде

1 10103
2 2093
3 109

но вместо этого выдает ерунду, когда одно и то же число считается несколько раз, например

 20 1
  1 2
  1 1
  1 2
 14 1
  1 2

я тоже пробовал

 awk 'BEGIN {FS = "\t"}; {print $3}' bisulfite_seq_set0_v_set1.tsv | sed -e 's/ //g' -e 's/\t//g' | uniq -c

Я пробовал каждую комбинацию, которую только мог придумать, на справочной странице uniq. Как я могу правильно подсчитать уникальные вхождения чисел с uniq?


person con    schedule 29.12.2015    source источник


Ответы (2)


awk-бесплатная версия с cut, sort и uniq:

cut -f 3 bisulfite_seq_set0_v_set1.tsv | sort | uniq -c

uniq работает с соседними совпадающими строками, поэтому ввод необходимо сначала отсортировать.

person Benjamin W.    schedule 29.12.2015

uniq -c подсчитывает смежные повторы. Чтобы посчитать их все, вам нужно сначала отсортировать их. Однако с awk вам это не нужно.

$ awk '{count[$3]++} END{for(c in count) print count[c], c}' file 

Сделаю

person karakfa    schedule 29.12.2015
comment
просто для уточнения: awk 'BEGIN {FS = \t}; {count[$3]++} END{for(c in count) print count[c], c}' bisulfite_seq_set0_v_set1.tsv - person con; 29.12.2015
comment
Если в ваших полях нет пробелов, вам не нужно явно устанавливать для FS значение tab. awk обрабатывает его по умолчанию. - person karakfa; 30.12.2015