linux awk sed tags find-occurrences

linux - encuentre la cantidad de ocurrencias y agréguela junto al patrón



awk sed (1)

Tengo varios archivos en un directorio y en algunos de ellos, algunos patrones ocurren varias veces. Por ejemplo

Contenido del archivo " 8_list ":

Spiroplasma_taiwanense Spiroplasma_diminutum Spiroplasma_apis Spiroplasma_sabaudiense Spiroplasma_taiwanense Spiroplasma_diminutum Spiroplasma_taiwanense EntAcro10 EntAcro10 Spiroplasma_apis Spiroplasma_culicicola Spiroplasma_sabaudiense Spiroplasma_diminutum Spiroplasma_sabaudiense Spiroplasma_sabaudiense Spiroplasma_sabaudiense Spiroplasma_apis Spiroplasma_culicicola Spiroplasma_culicicola Spiroplasma_culicicola Spiroplasma_culicicola Spiroplasma_diminutum Spiroplasma_culicicola Spiroplasma_culicicola EntAcro1

y contenido del archivo " 574_list "

Mesoplasma_florum_l1 Spiroplasma_sabaudiense Mesoplasma_florum_w37 EntAcro1

todos los archivos tienen una sola columna. Lo que quiero hacer es encontrar dentro de cada archivo los patrones idénticos y luego agregar un número al lado que describa la ocurrencia. Por ejemplo, en el archivo " 8_list " si Spiroplasma_culicicola ocurre 7 veces, entonces junto a la primera ocurrencia, debe escribir Spiroplasma_culicicola_1 , junto a la segunda aparición, Spiroplasma_culicicola_2 junto a la tercera aparición, Spiroplasma_culicicola_3 etc.

Intenté hacerlo con sed buscando cada patrón individualmente

sed -z ''s/Spiroplasma_culicicola/Spiroplasma_culicicola_2/2''

pero me preguntaba si hay una manera más fácil de hacerlo para todos mis archivos y todos los patrones en un directorio determinado

gracias por adelantado


Esta es una buena tarea para una herramienta tan agradable como awk :

awk ''{gsub(" ", "", $0); a[$0]++; print $0"_"a[$0]}'' 8_list

gsub(" ", "", $0); - reemplaza el espacio final al final de la línea

a[$0]++; - Incrementando el número de ocurrencias de cada patrón (valor de columna) tratando un valor de columna como una matriz

La salida:

Spiroplasma_taiwanense_1 Spiroplasma_diminutum_1 Spiroplasma_apis_1 Spiroplasma_sabaudiense_1 Spiroplasma_taiwanense_2 Spiroplasma_diminutum_2 Spiroplasma_taiwanense_3 EntAcro10_1 EntAcro10_2 Spiroplasma_apis_2 Spiroplasma_culicicola_1 Spiroplasma_sabaudiense_2 Spiroplasma_diminutum_3 Spiroplasma_sabaudiense_3 Spiroplasma_sabaudiense_4 Spiroplasma_sabaudiense_5 Spiroplasma_apis_3 Spiroplasma_culicicola_2 Spiroplasma_culicicola_3 Spiroplasma_culicicola_4 Spiroplasma_culicicola_5 Spiroplasma_diminutum_4 Spiroplasma_culicicola_6 Spiroplasma_culicicola_7 EntAcro1_1