ちょい足しawkの基本
基本
コンマンドラインでちょい足し的に使うときのカンペ。
$ awk '[BEGIN {各行を処理する前の処理}] [パターン] {各行の処理} [END {各行を処理した後の処理}]'
- BEGIEN, END, パターンは省略できる("[]"でくくったもの)
- 例は以下。アクセスログのステータスコードが200のものを出力
awk '$4 == "200" {print $4,$5}'# $4が200のとき、$4,$5を表示 awk '$4 != "200" { print }' # $4が200でないとき、1行まるごと表示 awk '$4 ~ /200/ { print }' # $4が200のとき、1行まるごと表示(正規表現) awk '$1 ~ /^a/ { print}' # $1が"a"で始まるとき、表示(正規表現) awk '$1 !~ /^a/{ print}' # $1が"a"以外で始まるとき、表示(正規表現)
(例)
$ cat access.log | awk '$4 = "200" {print $5$6}' | sed 's/\"//g'
デリミタを変更するには
Fオプションを使用する。カンマの場合は以下のとおり。
cat access.log | awk -F , '$4 = "200" {print $5$6}' | sed 's/\"//g'
マッチした文字列だけを表示
文字列の中から数字部分を取りだす場合は以下のとおり。
$ gawk '{print gensub(/(.*)([0-9]+)(.*)/,"\\2","")}'
-
gensubのgenは汎用からきている。
- 第1引数:正規表現
- 第2引数:置換文字列。ここでは後方参照の2番目として「\\2」を指定している。
- 第3引数:g/Gを指定した場合、マッチするすべてを置換する。それ以外の場合は最初だけ置換する。
マッチしたい部分とさせたくない部分を正規表現でグルーピングし、 マッチしたグループだけで後方参照で置換することで、 マッチさせた文字列だけを表示できる。
タブを出力する例
整形する際、区切り文字としてタブを出力したい場合の例。
$ cat hoge.txt |awk '{print $1"\t"$2}'