シェルワンライナー ~シェル芸を極める道~ 2歩目
awkによる検索と計算の練習
問 10.正規表現を使って偶数を出力する
[opc@linux ~]$ seq 5 | awk '/[24]$/' 2 4
問 11.C言語のような条件式で偶数を出力する
'$1%2==0'の意味は$1が出力行の1つ目の要素を指す。
ここでは2とか4となる。
そして%2==0は2で割って余り0つまり偶数であることを判定している
[opc@linux ~]$ seq 5 | awk '$1%2==0' 2 4
問 12.出力した値(偶数)から半角スペースを置いて「偶数」と出力する
{printf("%s 偶数\n",$1)}の解説。
引数1個目の%sは引数2個目の$1の入れ場所を指している。
[opc@linux ~]$ seq 5 | awk '$1%2==0{printf("%s 偶数\n",$1)}' 2 偶数 4 偶数
別解
[opc@linux ~]$ seq 5 | awk '$1%2==0{print $1,"偶数"}' 2 偶数 4 偶数
問 13.条件式を使って全ての値の偶数or奇数を判定し出力する
[opc@linux ~]$ seq 5 | awk '$1%2==0{print $1,"偶数"}$1%2{print $1,"奇数"}' 1 奇数 2 偶数 3 奇数 4 偶数 5 奇数
==1を入れてOK
[opc@linux ~]$ seq 5 | awk '$1%2==0{print $1,"偶数"}$1%2==1{print $1,"奇数"}' 1 奇数 2 偶数 3 奇数 4 偶数 5 奇数
問 14.BEGIN構文を使って問13と同じ結果を出力し最後に1から5を合計する
BEGIN,ENDパターンとはawkが1行目の処理を始める前と最終行に処理する内容とそれぞれawkで実行させたい内容を書きます。
ここでのBEGINの{a=0}はaと言う変数を初期化しています。
ENDでは変数aを出力しています。
{a+=$1}は各行の$1の値を足し合わせています。
[opc@linux ~]$ seq 5 | awk 'BEGIN{a=0}$1%2==0{print $1,"偶数"}$1%2{print $1,"奇数"}{a+=$1}END{print "合計",a}' 1 奇数 2 偶数 3 奇数 4 偶数 5 奇数 合計 15