De este archivohttps://1drv.ms/t/s!AjlMpzDMn2h7hWKyBGBxdhHXwjm8
Necesito tomar la columna 3, que consta de los números del 1 al 6, y generar esos números en palabras como 1-espumoso, 2-bien sin cambiar el archivo.
Además, estos deben contarse para poder generar cuántos de cada tipo hay con el nombre correspondiente.
Probé muchos tipos diferentes de awk
códigos y no pude conseguirlos. Actualmente tengo
awk -F: '$3==1, ((counter++)) {print counter1}' wine.txt
lo que no me da ningún resultado en absoluto.
Respuesta1
awk
solución:
Asumiendo el mapa de relaciones:
(espumoso=1 fino=2 fortificado=3 dulce=4 blanco=5 tinto=6)
awk -F':' 'BEGIN{ split("sparkling fine fortified sweet white red", words, " ") }
$3 in words{ c[$3]++ }
END{ for(i in words) print words[i]"="c[i] }' file
split("sparkling fine fortified sweet white red", words, " ")
- divida la cadena que contiene palabras cruciales en una matrizwords
por separador" "
(espacio) para que la matriz se indexe con números consecutivos que tengan palabras como valores (es decirwords[1]="sparkling" words[2]="fine" ...
)$3 in words{ c[$3]++ }
- compruebe si el valor del tercer campo (que contiene un dígito) aparece dentro dewords
los índices de la matriz; de ser así, el recuento coincide conc[$3]++
La salida:
sparkling=
fine=15
fortified=28
sweet=10
white=23
red=24