「Awk」の版間の差分

提供: Wikinote
移動: 案内検索
(覚え書き)
行4: 行4:
  
 
== 覚え書き ==
 
== 覚え書き ==
* 基本構文
+
=== 基本構文 ===
 
  awk [-F sep] 'command' [file ...]
 
  awk [-F sep] 'command' [file ...]
* 組み込み変数
+
セパレータ (デリミタ) は -D ではなく、-F で指定することに注意。
** FS - フィールドセパレータ
+
 
** NR - 現レコード数
+
=== 組み込み変数 ===
** NF - フィールド数
+
* FS フィールドセパレータ
** OFS - 出力フィールドセパレータ (print のカンマ区切りのセパレータ)
+
* NR 現レコード数
** ORS - 出力レコードセパレータ
+
* NF フィールド数
* 演算子
+
* OFS 出力フィールドセパレータ (print のカンマ区切りのセパレータ)
** ~ - マッチしたら真 ($0 ~ /re/)
+
* ORS 出力レコードセパレータ
** 他はほぼ C と同じ
+
 
* 制御構文
+
=== 演算子 ===
** <code>break</code>, <code>continue</code> - for や while の中で使う
+
* ~ マッチしたら真 ($0 ~ /re/)
** <code>next</code> - 次のレコードへ処理を移す
+
他はほぼ C と同じ
** <code>exit</code> - 残りのレコードは見ないで処理を中断
+
 
* 配列
+
=== 制御構文 ===
** <code>array[i]</code> - 一次元配列
+
* <code>break</code>, <code>continue</code> for や while の中で使う
** <code>array[i,j,k]</code> - 三次元配列
+
* <code>next</code> 次のレコードへ処理を移す
** <code>array[str]</code> - 連想配列
+
* <code>exit</code> 残りのレコードは見ないで処理を中断
*** <code>for (x in array) ...</code> ですべてのキーを取り出し可能
+
 
*** <code>if (str in array) ...</code> でキー str があるかどうか
+
=== 配列 ===
*** <code>array[str] = array[str] "hoge"</code> で連結可能
+
* <code>array[i]</code> 一次元配列
* その他
+
* <code>array[i,j,k]</code> 三次元配列
** 変数の初期化は不要
+
* <code>array[str]</code> 連想配列
** print $1 $2 で連結出力、カンマ区切りでスペース
+
** <code>for (x in array) ...</code> ですべてのキーを取り出し可能
** <code>{ print $0; } = { print; } = </code>
+
** <code>if (str in array) ...</code> でキー str があるかどうか
** 配列は参照渡し
+
** <code>array[str] = array[str] "hoge"</code> で連結可能
** -f program で自作ライブラリを複数取り込める
+
 
** $n (n > 0) を書き換えると、$0 も書き換わる
+
=== その他 ===
 +
* 変数の初期化は不要
 +
* <code>print $1 $2</code> で連結出力、カンマ区切りでスペース
 +
* <code>{ print $0; } = { print; } = </code>
 +
* 配列は参照渡し
 +
* -f program で自作ライブラリを複数取り込める
 +
* $n (n > 0) を書き換えると、$0 も書き換わる
  
 
== サンプルスクリプト ==
 
== サンプルスクリプト ==

2009年5月4日 (月) 19:16時点における版

参考文献

覚え書き

基本構文

awk [-F sep] 'command' [file ...]

セパレータ (デリミタ) は -D ではなく、-F で指定することに注意。

組み込み変数

  • FS ― フィールドセパレータ
  • NR ― 現レコード数
  • NF ― フィールド数
  • OFS ― 出力フィールドセパレータ (print のカンマ区切りのセパレータ)
  • ORS ― 出力レコードセパレータ

演算子

  • ~ ― マッチしたら真 ($0 ~ /re/)

他はほぼ C と同じ

制御構文

  • break, continue ― for や while の中で使う
  • next ― 次のレコードへ処理を移す
  • exit ― 残りのレコードは見ないで処理を中断

配列

  • array[i] ― 一次元配列
  • array[i,j,k] ― 三次元配列
  • array[str] ― 連想配列
    • for (x in array) ... ですべてのキーを取り出し可能
    • if (str in array) ... でキー str があるかどうか
    • array[str] = array[str] "hoge" で連結可能

その他

  • 変数の初期化は不要
  • print $1 $2 で連結出力、カンマ区切りでスペース
  • { print $0; } = { print; } =
  • 配列は参照渡し
  • -f program で自作ライブラリを複数取り込める
  • $n (n > 0) を書き換えると、$0 も書き換わる

サンプルスクリプト

Wiki 用に空白を挿入する

Wiki では、行が空白から始まっていると、以下のように固定幅フォントでタイプした通りに表示される。

ソースや出力結果などは通常これを用いる。

いちいち手作業で空白を入れるのは面倒なので (vim で C-v I はまあ許せるとして) gawk スクリプトにする。これはお手軽。

[hagio@localhost hagi_utils]$ cat addspace.gawk | ./addspace.gawk 
 #!/bin/gawk -f
 {
        print " " $0
 }

ただ、コマンド行はスペースが入らないので注意すること。>自分