awkのワンライナーのサンプルコード
awkのワンライナーのサンプルコードを書いてみたいと思います。
in.txtは、下記を想定しています。
$ cat in.txt 9 2 0 abc121 3 5 8 kdh34 4 9 5 89eg 2 0 8 0024hduk 2 6 0 rdw221 4 7 5 954ss
列の最大値を求める
1列目の最大値を求めるワンライナーです。
$ cat in.txt | awk 'NR == 1{max = $1} {if($1 > max){max = $1}} END{print "max=" max}'
max=9
列の最小値を求める
1列目の最小値を求めるワンライナーです。
$ cat in.txt | awk 'NR == 1{min = $1} {if($1 < min){min = $1}} END{print "min=" min}'
min=2
列の総和を求める
2列目の総和を求めるワンライナーです。
$ cat in.txt | awk '{sum += $2} END{print "sum=" sum}'
sum=29
列の平均値を求める
2列目の平均値を求めるワンライナーです。
$ cat in.txt | awk '{sum += $2; count++} END{print "average=" sum / count }'
average=4.83333
if else 文も便利です
少々煩雑になってきますが、if else 文も便利です。
$ cat in.txt | awk '{if($2 > 3){print $2 "は3より大きい"}else{print $2 "は3以下"}}'
2は3以下
5は3より大きい
9は3より大きい
0は3以下
6は3より大きい
7は3より大きい
正規表現
正規表現も組み合わせると、幅が広がります。
4列目の先頭の文字が数字の場合に、print出力しています。
$ cat in.txt | awk '$4 ~ /^[0-9]/{print $4 "は先頭の文字が数字"}'
89egは先頭の文字が数字
0024hdukは先頭の文字が数字
954ssは先頭の文字が数字
