Cómo tomar información de una columna y cambiarla por otra cosa y contarla

Cómo tomar información de una columna y cambiarla por otra cosa y contarla

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 awkcó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

awksolució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 matriz wordspor separador " "(espacio) para que la matriz se indexe con números consecutivos que tengan palabras como valores (es decir words[1]="sparkling" words[2]="fine" ...)

  • $3 in words{ c[$3]++ }- compruebe si el valor del tercer campo (que contiene un dígito) aparece dentro de wordslos í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

información relacionada