このファイルから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