差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
awk [2016/05/11 15:37] – [実行方法] mumeiyamibito | awk [2018/03/13 16:46] (現在) – [シェル変数をパターンとして引き渡す] mumeiyamibito | ||
---|---|---|---|
行 39: | 行 39: | ||
===== 構文 ===== | ===== 構文 ===== | ||
- | * 全体のコード\\ < | + | ==== 全体のコード |
+ | < | ||
BEGIN{ | BEGIN{ | ||
開始処理 | 開始処理 | ||
行 53: | 行 54: | ||
終了処理 | 終了処理 | ||
}</ | }</ | ||
+ | ==== 変数 ==== | ||
* 変数 | * 変数 | ||
* $0: レコード (行全体) | * $0: レコード (行全体) | ||
* $1, $2, $3, ...: フィールドの各データ | * $1, $2, $3, ...: フィールドの各データ | ||
- | * 変数は自分で定義することも可能 | + | * 変数は自分で定義することも可能 |
* よく使う組み込み変数 | * よく使う組み込み変数 | ||
* FS: 区切り文字 (データ間を区切る文字) | * FS: 区切り文字 (データ間を区切る文字) | ||
* オプション '' | * オプション '' | ||
- | * 改行 | + | |
- | * 複数行を1行にしたい(ワンライナー)場合、「; | + | ==== 配列 ==== |
- | * よく使う関数 | + | |
- | + | * 定義は不要 | |
- | * 変数の中身などを出力 | + | * 配列のインデックスは 1 から始まる (0 ではない) |
- | * print の後に括弧を付けない | + | |
- | * 複数のデータを表示する場合は、スペースで区切って列挙 (例: print $1 " | + | ==== 演算子 ==== |
- | * スペースやタブを出力したい場合は、''" | + | |
* 演算 | * 演算 | ||
* 四則演算が使える | * 四則演算が使える | ||
行 73: | 行 74: | ||
* インクリメンタル (++) やデクリメント (--) が使える | * インクリメンタル (++) やデクリメント (--) が使える | ||
* 代入演算子 (+= や -= など) が使える | * 代入演算子 (+= や -= など) が使える | ||
+ | |||
+ | ==== if ==== | ||
+ | * 条件を分岐する場合\\ < | ||
+ | if (条件1){ | ||
+ | 処理1 | ||
+ | else if (条件2){ | ||
+ | 処理2 | ||
+ | } | ||
+ | else{ | ||
+ | 処理3 | ||
+ | }</ | ||
+ | * 例:\\ < | ||
+ | if (i == 0){ | ||
+ | print " | ||
+ | } | ||
+ | else if (0 < i && i < 10){ | ||
+ | print " | ||
+ | } | ||
+ | else{ | ||
+ | print "10 over" | ||
+ | } | ||
+ | </ | ||
+ | * 条件式で使える記号 | ||
+ | * <, >, <=, =>, == (数値、文字列の比較に使う), | ||
+ | * &&, || | ||
+ | * 正規表現では ~ で正規表現とつなげる (例: i ~ /hoge/) | ||
+ | |||
+ | |||
+ | ==== for ==== | ||
+ | * 繰り返し処理をする場合に使う\\ < | ||
+ | for (変数の初期化; | ||
+ | 処理 | ||
+ | } | ||
+ | </ | ||
+ | * C 言語の for 文と一緒 | ||
+ | * 例\\ < | ||
+ | for (i = 0; i < 3; i ++){ | ||
+ | print " | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ==== よく使う関数 ==== | ||
+ | * print\\ < | ||
+ | * 変数の中身などを出力 | ||
+ | * 複数のデータを表示する場合は、スペースで区切って列挙 (例: print $1 " | ||
+ | * スペースやタブを出力したい場合は、''" | ||
+ | * printf\\ < | ||
+ | * C 言語の printf と同じく、変数の内容を整形して表示 | ||
+ | * %s: 文字列 (s の前に整数があると、スペースでその数だけの幅に整形する; | ||
+ | * %d: 整数 (d の前に整数があると、スペースでその数だけの幅に整形する; | ||
+ | * %f: 浮動小数 (f の前に小数があると、整数部を全体の幅、小数部を小数点以下の桁数にする; | ||
+ | * sub, gsub\\ < | ||
+ | * 文字列の置換をする | ||
+ | * sub は 1 回のみ、gsub は繰り返し置換 (正規表現の s/ | ||
+ | * 例: str = ' | ||
+ | * sub\\ < | ||
+ | * gsub\\ < | ||
+ | * split\\ < | ||
+ | * **対象文字列** を **区切り文字** で区切って、**配列** に代入する関数 | ||
+ | * 返り値は、配列の要素数になる\\ < | ||
+ | * length\\ < | ||
+ | * 文字列や配列の長さを出力 | ||
+ | |||
+ | ==== その他 ==== | ||
+ | * 改行 | ||
+ | * 複数行を1行にしたい(ワンライナー)場合、「; | ||
===== awk プログラムの例 ===== | ===== awk プログラムの例 ===== | ||
==== 合計と平均算出 ==== | ==== 合計と平均算出 ==== | ||
* 対象データ: | * 対象データ: | ||
- | * コード\\ <code awk sumaverage.awk># | + | * コード |
+ | # | ||
BEGIN{ | BEGIN{ | ||
total = 0 | total = 0 | ||
行 94: | 行 162: | ||
} | } | ||
</ | </ | ||
+ | * 実行方法 | ||
+ | * バッチファイル\\ <code bash>$ awk -f sumaverage.awk data.txt</ | ||
+ | * バッチファイル単体\\ <code bash> | ||
+ | $ chmod +x sumaverage.awk | ||
+ | $ ./ | ||
+ | </ | ||
+ | * コード (ワンライナー)\\ <code bash> | ||
+ | $ awk ' | ||
+ | </ | ||
+ | |||
+ | ===== Tips ===== | ||
+ | ==== シェル変数をパターンとして引き渡す ==== | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * 参考サイト: | ||
+ | |||
===== 参考サイト ===== | ===== 参考サイト ===== | ||
行 100: | 行 185: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
+ | * [[http:// | ||
+ | {{tag> |