linux - habr - sed bash



Как поместить последовательные числа только в конце повторяющихся строк (1)

У меня есть файл с несколькими повторяющимися строками. Я хочу поставить порядковый номер только в конце этих повторений.

Пример.

Входные данные :

Jose da Silva
Jose da Silva
Fulano de Tal
Jose da Silva
Sicrano Pereira
Ze Ruela
Sicrano Pereira
Jose da Silva

Вывод:

Jose da Silva #1
Jose da Silva #2
Fulano de Tal
Jose da Silva #3
Sicrano Pereira #1
Ze Ruela
Sicrano Pereira #2
Jose da Silva #4

Я не могу сортировать эти строки. Они должны появляться в одном порядке.

https://src-bin.com


Answer #1

Петля дважды:

awk 'FNR==NR {count[$0]++; next} 
     count[$0]>1 {$0=$0 FS "#"++times[$0]}
     1' file file

То есть: в первый раз подсчитывайте, сколько раз каждая строка имеет место. Во второй раз добавьте добавочное число к тем, которые появляются более одного раза.

$ awk 'FNR==NR {count[$0]++; next} count[$0]>1 {$0=$0 FS "#"++times[$0]}1' file file
Jose da Silva #1
Jose da Silva #2
Fulano de Tal
Jose da Silva #3
Sicrano Pereira #1
Ze Ruela
Sicrano Pereira #2
Jose da Silva #4




sed