Como pegar a entrada de uma coluna e alterá-la para outra coisa e contá-la

Como pegar a entrada de uma coluna e alterá-la para outra coisa e contá-la

Deste arquivohttps://1drv.ms/t/s!AjlMpzDMn2h7hWKyBGBxdhHXwjm8

Preciso pegar a coluna 3, que consiste em números de 1 a 6, e gerar esses números em palavras como 1-espumante, 2-fino sem alterar o arquivo.

Além disso, eles devem ser contados para que eu possa exibir quantos de cada tipo existem com o nome correspondente.

Tentei muitos tipos diferentes de awkcódigos e não consegui obtê-los. Atualmente eu tenho

awk -F: '$3==1, ((counter++)) {print counter1}' wine.txt

o que não me dá saída alguma.

Responder1

awksolução:

Assumindo o mapa de relação:

(espumante=1 fino=2 fortificado=3 doce=4 branco=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 a string contendo palavras cruciais em array wordspor separador " "(espaço) para que o array seja indexado com números consecutivos tendo palavras como valores (ou seja words[1]="sparkling" words[2]="fine" ...)

  • $3 in words{ c[$3]++ }- verifique se o valor do terceiro campo (contendo um dígito) ocorre dentro wordsdos índices do array, em caso afirmativo - a contagem corresponde ac[$3]++


A saída:

sparkling=
fine=15
fortified=28
sweet=10
white=23
red=24

informação relacionada