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
Сделаю