$ awk [オプション] '処理内容' データ
$ awk [オプション] -f バッチファイル データ
$ chmod +x バッチファイル $ ./バッチファイル データ
#!/usr/bin/awk -f
を付けること (/usr/bin/awk は環境によって異なるので、which コマンドなどで確認すること)$ コマンド | awk [オプション]
表記 | 効果 | 備考 |
---|---|---|
-F 区切り文字 | 区切り文字(入力フィールドセパレータ)の変更 | |
-v 変数名=変数値 | awk 内に変数を渡す | シェル内での実行の際、シェル変数を awk に渡したい時に使う |
-f バッチファイル | バッチファイルに記述した処理をする |
#!/usr/bin/awk BEGIN{ 開始処理 } /正規表現パターン1/{ パターン1に対する処理 } /正規表現パターン2/{ パターン2に対する処理 } : END{ 終了処理 }
-F 区切り文字
で変更可 (区切り文字は正規表現での表現可)if (条件1){ 処理1 else if (条件2){ 処理2 } else{ 処理3 }
if (i == 0){ print "0" } else if (0 < i && i < 10){ print "1-9" } else{ print "10 over" }
for (変数の初期化; 変数の条件式; 変数の変化){ 処理 }
for (i = 0; i < 3; i ++){ print "Hello" }
Hello を 3 回出力
print "文字列"
“ ”
や “\t”
を変数の間に入れるprintf("フォーマット", 値)
sub(正規表現, 置換後の文字列, 対象とする文字列)
sub(/a/, "", str)
⇒ bnana
gsub(/a/, "", str)
⇒ bnn
split(対象文字列, 配列, 区切り文字)
hoge = split("banana", data, "a")
hoge は 3、data には「b」「n」「n」が入る
length(配列)
#!/usr/bin/awk -f BEGIN{ total = 0 count = 0 } $0 !~ /^#/{ total += $2 count ++ } END{ average = total / count print "Total: " total print "Average: " average }
$ awk -f sumaverage.awk data.txt
$ chmod +x sumaverage.awk $ ./sumaverage.awk data.txt
$ awk 'BEGIN{total = 0; count = 0} $0!~/^#/{total += $2; count ++} END{average = total / count; print "Total: " total; print "Average: " average}'
-v
オプションで変数を渡しつつ、$0 ~ VAR
でマッチさせる$ awk -v VAR '$0 ~ VAR{print $0}' FILE
VAR
は変数名FILE
は処理するファイル名