差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
| awk [2016/05/11 15:54] – [構文] mumeiyamibito | awk [2018/03/13 16:46] (現在) – [シェル変数をパターンとして引き渡す] mumeiyamibito | ||
|---|---|---|---|
| 行 58: | 行 58: | ||
| * $0: レコード (行全体) | * $0: レコード (行全体) | ||
| * $1, $2, $3, ...: フィールドの各データ | * $1, $2, $3, ...: フィールドの各データ | ||
| - | * 変数は自分で定義することも可能 | + | * 変数は自分で定義することも可能 |
| * よく使う組み込み変数 | * よく使う組み込み変数 | ||
| * FS: 区切り文字 (データ間を区切る文字) | * FS: 区切り文字 (データ間を区切る文字) | ||
| * オプション '' | * オプション '' | ||
| - | ==== その他 ==== | ||
| - | * 改行 | ||
| - | * 複数行を1行にしたい(ワンライナー)場合、「; | ||
| - | ==== 関数 | + | ==== 配列 |
| - | * よく使う関数 | + | * 複数のデータをひとまとめにした変数 |
| - | + | * 定義は不要 | |
| - | * 変数の中身などを出力 | + | * 配列のインデックスは 1 から始まる (0 ではない) |
| - | * print の後に括弧を付けない | + | |
| - | * 複数のデータを表示する場合は、スペースで区切って列挙 (例: print $1 " | + | |
| - | * スペースやタブを出力したい場合は、''" | + | |
| ==== 演算子 ==== | ==== 演算子 ==== | ||
| * 演算 | * 演算 | ||
| 行 79: | 行 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 プログラムの例 ===== | ||
| 行 100: | 行 161: | ||
| print " | print " | ||
| } | } | ||
| - | </ | + | </ |
| - | $ awk -f sumaverage.awk data.txt | + | * 実行方法 |
| - | </ | + | * バッチファイル\\ <code bash>$ awk -f sumaverage.awk data.txt</ |
| + | * バッチファイル単体\\ <code bash> | ||
| $ chmod +x sumaverage.awk | $ chmod +x sumaverage.awk | ||
| $ ./ | $ ./ | ||
| </ | </ | ||
| - | | + | |
| $ awk ' | $ awk ' | ||
| </ | </ | ||
| + | |||
| + | ===== Tips ===== | ||
| + | ==== シェル変数をパターンとして引き渡す ==== | ||
| + | * '' | ||
| + | * '' | ||
| + | * '' | ||
| + | * 参考サイト: | ||
| + | |||
| + | |||
| ===== 参考サイト ===== | ===== 参考サイト ===== | ||
| * [[http:// | * [[http:// | ||
| 行 114: | 行 185: | ||
| * [[http:// | * [[http:// | ||
| * [[http:// | * [[http:// | ||
| + | * [[http:// | ||
| + | {{tag> | ||