列から入力を取得し、それを別のものに変更してカウントする方法

列から入力を取得し、それを別のものに変更してカウントする方法

このファイルからhttps://1drv.ms/t/s!AjlMpzDMn2h7hWKyBGBxdhHXwjm8

1~6 の数字で構成される列 3 を取得し、ファイルを変更せずに、それらの数字を 1-sparkling、2-fine などの単語に出力する必要があります。

また、これらを数えて、対応する名前を持つ各タイプの数を出力できるようにする必要があります。

いろいろな種類のawkコードを試してみましたが、取得できませんでした。現在、

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

まったく出力が得られません。

答え1

awk解決:

関係マップを想定:

(スパークリング=1 上質=2 酒精強化=3 甘口=4 白=5 赤=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, " ")- 重要な単語を含む文字列を区切り文字(スペース)wordsで配列に分割し" "、配列が単語を値として持つ連続した数字でインデックス付けされるようにします(つまりwords[1]="sparkling" words[2]="fine" ...

  • $3 in words{ c[$3]++ }- 3番目のフィールド値(数字を含む)が配列wordsインデックス内に存在するかどうかを確認し、存在する場合は、一致するものを数えます。c[$3]++


出力:

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

関連情報