サンプルプログラムの入力テキストには以下のものを使っています.(progreport)
programing report 123.4 Linux vine 4567 knoppix filter java c 567 awk hogehoge foofoo
$1,$2,$3とそれぞれの項に対応し,$0は行自体を値に持ちます.数字の代わりに変数でも構いません.
$ awk '{for(i=1; i<3; i++) print $i}' progreport programing report Linux vine java c hogehoge foofoo
OFSで出力時の区切り文字を設定します.デフォルトはスペースになっています.
$ awk 'BEGIN{OFS="%";print "4", "6";}' 4%6
FSで入力時の区切り文字を設定します.デフォルトはスペースになっているので,上のprogreportをうまく読めますが,#に変更してみます.
$ awk 'BEGIN{FS="#"}{print $1}' progreport programing report 123.4 Linux vine 4567 knoppix filter java c 567 awk hogehoge foofoo
printで改行してくれますが,これをORSで変更できます.
$ awk 'BEGIN{ORS="#"}{print $1}' progreport programing#Linux#java#hogehoge#
デフォルトでは改行で1行とみなしていますが,RSで変更できます.空行で区切るときはRS=""
$ awk 'BEGIN{RS="#"}{print $5}' progreport vine
NRはそのときの行番号としても使えますが,正確には読み込んだ行数ですので ENDで使えばファイル内の行数となります.
$ awk 'END{print NR}' progreport 4
NFはそれぞれの行に存在する項の数を保持します.
$ awk '{print NF}' progreport 3 5 4 2
FNRはNRとは違い読み込むファイルが変われば値がクリアされます.
$ awk '{print FNR, NR}' progreport progreport 1 1 2 2 3 3 4 4 1 5 2 6 3 7 4 8
FILENAME現在のファイル名を保持します.ファイルが変われば変更されます.
$ awk '{print FILENAME}' progreport progreport progreport progreport progreport
ARGCはコマンドライン引数の数を保持します.オプション等含まない.
$ awk 'BEGIN{print ARGC}' progreport 2
ARGV[0],ARGV[1]など
$ awk 'BEGIN{print ARGV[0], ARGV[1]}' progreport awk progreport
CONVFMTで変更する.デフォルトは"%.6g".
$ awk 'BEGIN{CONVFMT="%2.2f"; a=12.1234; printf a}' 12.12
OFMTはCONVFMTt違い,printのときに適用されるフォーマット.
$ awk 'BEGIN{OFMT="%2.2f"; a=12.1234; print a}' 12.12
SUBSEPですが,デフォルトは"\034"となっています. a["pro", "report"]なら"pro\034report"となります.以下はインデックスが"pro#report"となったために表示されません.
$awk 'BEGIN{a["pro","report"]=1;SUBSEP="#";print a["pro","report"]}'
ENVIRONのインデックスに環境変数の名前を入れるとその値がパスになっている.
$ awk 'BEGIN{print ENVIRON["HOME"]}' /home/progreport
RLENGTHは正規表現を使ったときは最長の値になります.一致しなかったときは-1
$ awk 'BEGIN{match("progreport", "ogre"); print RLENGTH}' 4
RSTARTで,一致しなかったときは0になります.
$ awk 'BEGIN{match("progreport", "ogre"); print RSTART}' 3