У меня есть текстовый файл с сотнями трехзначных чисел.
Например:
0 2 3
0 2 3
0 2 9
0 3 9
0 9 2
0 9 2
0 9 9
1 2 2
1 2 2
1 2 2
1 2 9
1 2 9
1 3 3
1 9 2
1 9 2
1 9 2
1 9 3
1 9 9
1 9 9
1 9 9
1 9 9
2 0 2
2 0 3
2 0 9
2 1 2
2 1 2
2 1 3
2 1 9
2 1 9
2 2 4
2 2 5
2 2 5
2 2 5
2 2 6
2 2 6
2 2 8
Я хочу преобразовать это для показа, сколько из каждого числа находится в файле, чтобы выглядеть примерно так:
0 2 3 2
0 9 2 2
1 2 2 3
etc
sort -n numbers.txt | uniq -c | sed -E 's/^( *[0-9]+) (.*)$/\2 \1/'
был бы самый простой способ достигнуть Вашей цели. Это:
sort
s Ваши числа сначала, на всякий случайuniq
ue установленsed
s результат для перемещения количества в заднюю часть каждой строкиТо, что строки состоят из последовательностей цифр, в основном не важно - если Вы не хотите сделать арифметику на самих числах, можно рассчитать / uniquify их точно так же, как любые другие строки, например, использование ассоциативного массива или хеша:
awk '{c[$0]++} END {for (i in c) printf "%s\t%d\n", i, c[i]}' numbers.txt
или
perl -lnE '$c{$_}++ }{ for $k (keys %c) { say "$k\t$c{$k}" }' numbers.txt