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

1

Deste arquivo link

Eu preciso pegar a coluna 3, que consiste nos números de 1 a 6, e enviar esses números para palavras como 1-espumante, 2-fine sem alterar o arquivo.

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

Eu tentei muitos tipos diferentes de awk códigos e não consegui obtê-lo. Atualmente tenho

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

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

    
por Zach P 24.11.2017 / 18:25

1 resposta

1

awk solução:

Assumindo o mapa de relações:

(espumante = 1 fino = 2 fortificado = 3 doce = 4 branco = 5 vermelho = 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 na matriz words pelo separador " " (espaço) para que a matriz seja indexada com números consecutivos com 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 do array words indices, se sim - conte as correspondências com c[$3]++

A saída:

sparkling=
fine=15
fortified=28
sweet=10
white=23
red=24
    
por 24.11.2017 / 19:27