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

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

2 ответа

Решение

awkверсия с cut, sort а также uniq:

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

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

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

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

Сделаю

Другие вопросы по тегам