おぼえがき

おぼえがき

awk システム変数を理解(FS OFS RS ORS NF NR FILENAME)

2007-02-23 | sed awk
awk 'BEGIN {FS="n"; RS="ORS="-"} {print $1,$NF}' aaaa

ファイルの中身
-----------------
1
2
3

4
5
6

7
8
9
-----------------

以下のスクリプトの実行

ファイルの1から3 4から6 7から8をひとつのデータとして考える

awk '
 BEGIN {
  FS="n";      # カラムの区切りを改行に
  RS="";       # レコードの区切りを空白に(ファイルの3と4の間)
  OFS="*";      # 出力のデミリタ(カンマがあればOFSに変わる $1,$NFの部分)
  ORS="nn"     # 出力のデミリタ(改行二つが1回ごとの実行のデミリタとなる)
 }

 {
  print NR"." $1,$NF # NR:現在の行 / NF:1レコードの最大カラムの位置
 }

 END {
  print FILENAME   # FILENAME : ファイル名の出力
 }' ファイル名


-----------------
結果

1.1*3

2.4*6

3.7*9

ファイル名
-----------------

awk 変数(パラメータ)の渡し方

2007-02-23 | sed awk
awk 'BEGIN {print AA}' AA="XYZ"
ってやっても、

XYZ

を出力してくれない。

これは、awkの制約で、最初の入力行が読み込まれた後でなければ、
コマンドラインパラメータには、アクセスできないため。

つまり、BEGINの中では、アクセスできない・・・


だけど、


-v オプションを使えば、そうでもなくなるわけで、

awk -v AA='XYZ' 'BEGIN {print AA}'

ってやると、XYZが出力される。

-vオプションは、スクリプトの前に書くこと。

これで、これも納得できる。