予約変数など の変更点


 RIGHT:寄稿:東條遼平
 
 サンプルプログラムの入力テキストには以下のものを使っています。(progreport)
 
  programing report 123.4
  Linux vine 4567 knoppix filter
  java c 567 awk
  hogehoge foofoo
 
 * 項や行の値を持つ変数 [#o9b24115]
 
 $1、$2、$3とそれぞれの項に対応し、$0は行自体を値に持ちます。数字の代わりに変数でも構いません。
 
  $ awk '{for(i=1; i<3; i++) print $i}' progreport
  programing
  report
  Linux
  vine
  java
  c
  hogehoge
  foofoo
 
 * 出力区切り文字 [#feb61118]
 
 OFSで出力時の区切り文字を設定します。デフォルトはスペースになっています。
 
  $ awk 'BEGIN{OFS="%";print "4", "6";}'
  4%6
 
 * 入力区切り文字 [#oeed1ea4]
 
 FSで入力時の区切り文字を設定します。デフォルトはスペースになっているので、上のprogreportをうまく読めますが、#に変更してみます。
 
  $ awk 'BEGIN{FS="#"}{print $1}' progreport
  programing report 123.4
  Linux vine 4567 knoppix filter
  java c 567 awk
  hogehoge foofoo
 
 * 出力レコード区切り子の制御 [#g6c505a5]
 
 printで改行してくれますが、これをORSで変更できます。
 
  $ awk 'BEGIN{ORS="#"}{print $1}' progreport
  programing#Linux#java#hogehoge#
 
 * 入力レコード区切り子の制御 [#f61adbf7]
 
 デフォルトでは改行で1行とみなしていますが、RSで変更できます。空行で区切るときはRS=""
 
  $ awk 'BEGIN{RS="#"}{print $5}' progreport
  vine
 
 * 今まで読み込んだ行数 [#dcbe9a92]
 
 NRはそのときの行番号としても使えますが、正確には読み込んだ行数ですので ENDで使えばファイル内の行数となります。
 
  $ awk 'END{print NR}' progreport
  4
 
 * 項の数 [#d0f99b8c]
 
 NFはそれぞれの行に存在する項の数を保持します。
 
  $ awk '{print NF}' progreport
  3
  5
  4
  2
 
 * 現在のファイルから読み込んだ行数 [#s614b3fb]
 
 FNRはNRとは違い読み込むファイルが変われば値がクリアされます。
 
  $ awk '{print FNR, NR}' progreport progreport
  1 1
  2 2
  3 3
  4 4
  1 5
  2 6
  3 7
  4 8
 
 * 現在のファイル名 [#ecb3e9e4]
 
 FILENAME現在のファイル名を保持します。ファイルが変われば変更されます。
 
  $ awk '{print FILENAME}' progreport
  progreport
  progreport
  progreport
  progreport
 
 * コマンドライン引数の数 [#yb99c45a]
 
 ARGCはコマンドライン引数の数を保持します。オプション等含まない。
 
  $ awk 'BEGIN{print ARGC}' progreport
  2
 
 * コマンドライン引数の値 [#h8a72cca]
 
 ARGV[0],ARGV[1]など
 
  $ awk 'BEGIN{print ARGV[0], ARGV[1]}' progreport
  awk progreport
 
 * 数値から文字列に変換するときのフォーマット [#y04f0eaa]
 
 CONVFMTで変更する。デフォルトは"%.6g"。
 
  $ awk 'BEGIN{CONVFMT="%2.2f"; a=12.1234; printf a}'
  12.12
 
 * printにおいて数値から文字列に変換するときのフォーマット [#i9c45ca5]
 
 OFMTはCONVFMTt違い、printのときに適用されるフォーマット。
 
  $ awk 'BEGIN{OFMT="%2.2f"; a=12.1234; print a}'
  12.12
 
 * 多次元配列のインデックスを結合する文字 [#d3f757af]
 
 SUBSEPですが、デフォルトは"\034"となっています。 a["pro", "report"]なら"pro\034report"となります。以下はインデックスが"pro#report"となったために表示されません。
 
  $awk 'BEGIN{a["pro","report"]=1;SUBSEP="#";print a["pro","report"]}'
 
 
 * PCの環境変数を保持している連想配列 [#tb10172a]
 
 ENVIRONのインデックスに環境変数の名前を入れるとその値がパスになっている。
 
  $ awk 'BEGIN{print ENVIRON["HOME"]}'
  /home/progreport
 
 * match関数で一致した文字数 [#t2fd251b]
 
 RLENGTHは正規表現を使ったときは最長の値になります。一致しなかったときは-1
 
  $ awk 'BEGIN{match("progreport", "ogre"); print RLENGTH}'
  4
 
 * match関数で一致した部分文字列の開始位置 [#ne29359f]
 
 RSTARTで、一致しなかったときは0になります。
 
  $ awk 'BEGIN{match("progreport", "ogre"); print RSTART}'
  3
 
Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.002 sec.