【メモ】AWKについて
AWKについて調べた際のメモおよび「『シェル芸』に効くAWK処方箋」の読書メモです。
- マニュアルはここ(あとで読む)
- 【 awk 】コマンド(基本編)――テキストの加工とパターン処理を行う
awk ‘pattern {action}’ filename
$番号
でフィールドを指定- スクリプトをファイルに保存して実行することもできる
- 入力の一行目を削除したい場合はパイプラインの前段に
sed 1d
を通しておく - いくつか組み込み変数がある
- デフォルトで拡張正規表現でパターンの位置に
/pattern/
で記述する &&
や||
で条件をつなぐことができる~
はマッチ演算子で例えば$4 ~ /pattern/
というようにどのフィールドのマッチングをとるか指定できるBEGIN { … }
で全行処理前のアクション、END { … }
で全行処理後のアクションを記述できる- アクション内では複数の処理を実行してもいい
- shebangは
#! /usr/bin/awk -f
- 一行単位の処理では不可能な条件分岐は制御構文を使う
- if, switch ~ case, while, do ~ while, forなど一通り使える
- いくつかの組み込み関数が使える
- [初心者向け]Awkの使い方
- AWKのまとめ
- 関数定義は
function name(args) { … }
で記述できる
- 関数定義は
- AWK リファレンス
- AWK - wikipedia
- awk とはどんな言語か
- AWKコマンドの使い方
- getline関数で次の行を取得できる
- 実例でわかる awk: 第 1 回
- はじめてのAWK
- Getting Started with awk
- なるべく書かないawkの使い方
- 実用 awk ワンライナー
- 「シェル芸」に効くAWK処方箋
- 第1章:導入
- 第2章:行操作
- 第3章:列操作
- 第4章:文字列関数
- AWKのインデックスは1から始まるので注意
- substr関数とindex関数の組み合わせで文字列を抜き出す
- match関数は組み込み変数に結果を代入するので後から参照できる
grep -o
と等価なので文字数の少ないそっちがおすすめ
- sub/gsubの返り値は置換した個数であり置換結果ではないので注意
- 第5章:数値演算
- 数字は全て倍精度不動少数点数扱い
- 第6章:配列・連想配列
- 配列はインデックスが数値、連想配列は文字列なだけで同じデータ構造
for i in array
でループ処理できるがiに入るのは値ではなくインデックス- split関数で手軽に配列を作成できる
if “key” in array
で配列の検査ができる
- 第7章:GNU AWKの拡張機能
- match関数の第3引数でマッチした値を参照できる
- 第8章:パイプ
- 第9章:GNU拡張とCSVファイルの扱い
- 第10章:もっとGNU拡張
- 第11章:実践
- 第12章:Podcastダイジェスト
まとめ
- awkはAWKという処理系の実装であり両者は別物
awk ‘pattern {action}’ [filename]
、特にパターン・アクションの組み合わせの集合が全て- 独立したスクリプト言語なのでサーバプログラムも作れる
とりあえずなんとか読むことはできるはず。書けるようになるのはまた今度頑張る。