計算しようとしています。子音と母音の発生存在する複数のファイルLinuxでは、各ファイルの発生回数を個別に計算したいと思います。私は使う
awk -v FS=""'{for ( i=1;i<=NF;i++){if($i ~/[bcdfghjklmnpqrtsvwxyzBCDEFGHJKLMNPQRTSVWXYZ]/)cout_c++ ;else if ($i ~/[aeiouAEIOU]/) count_v++}}END {print FILENAME,count_v,count_c}'
file1 は次のようになります。
bac Dfeg
k87 eH
tRe
rt up
file2 は次のようになります。
hi
rt2w
PrOt
ただし、両方のファイルの項目を印刷します。
file2 7 19
出力が次のようになるようにどのように変更できますか?
file1 5 12
file2 2 7
ベストアンサー1
この質問に答えるにはフォローアップの質問、これは私のものです。フォローアップ回答À
GNU awkの使用é
@StéphaneChazelasコメントから):
$ awk -v IGNORECASE=1 '
{
v_cnt += gsub(/[aeiou]/,"")
c_cnt += gsub(/[bcdfghjklmnpqrtsvwxyz]/,"")
}
ENDFILE {
print FILENAME, v_cnt+0, c_cnt+0
v_cnt = c_cnt = 0
}
' file1 file2
file1 5 12
file2 2 7
前回の回答でPOSIX awkを修正する方法の簡単な練習として残しておきます。
上記の角かっこ式にアルファベット文字がリストされていない場合でも、表示するには次のように調整します。
awk -v IGNORECASE=1 '
{
v_cnt += gsub(/[aeiou]/,"")
c_cnt += gsub(/[bcdfghjklmnpqrtsvwxyz]/,"")
}
/[[:alpha:]]/ {
gsub(/[^[:alpha:]]+/,"")
printf "Warning %s[%d]: Unexpected chars found: %s\n", FILENAME, FNR, $0 > "/dev/stderr"
}
ENDFILE {
print FILENAME, v_cnt+0, c_cnt+0
v_cnt = c_cnt = 0
}
' file1 file2
もちろん、これを処理する方法は、さまざまな方法で、さまざまな量の出力+詳細で処理できます。