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