на основе символа строки, напечатайте соответствующее число рядом с ним

awk '/^>/ { printf "%s ",$0; next; } { print; }' file1 | 
    sort -n |
    awk '{ print $1; print $2; }'
3
04.10.2019, 04:47
1 ответ

Вы можете использовать простые команды awk, как показано ниже. Ниже просто реконструируется вся строка {..}1, добавляя к текущей строке $0значение, указывающее количество вхождений слова в файл.

awk '{ $0 = $0 "" ++unique[$0] }1' file

Часть unique[$0]создает хеш-карту -со значением $0в качестве ключа, т.е. unique['H'], unique['O']и т. д. Приращение к ней до -будет увеличивать значение в массиве как unique['H']=1, unique['H']=2и так далее.Мы также можем просто добавить счетчик в конец каждой строки вместо того, чтобы явно -создавать каждую строку

awk '{ print($0 "" ++unique[$0]) }' file

Эквивалентная версия Perl с той же логикой

perl -lpe '{ $_.= ++$unique{$_} }' file

Последнее может быть легко адаптировано к случаям, когда каждый символ не находится в отдельной строке, например:

$ echo ABBC | perl -lpe 's/./$&. ++$unique{$&}/ge'
A1B1B2C1
4
27.01.2020, 21:17

Теги

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