書式
awk [オプション] [コマンド] [ファイル……]
オプション
-f:ファイル名:awkスクリプトが書かれたファイルを指定する
-F:区切り文字を指定する。
-v:変数名=値:変数を定義する。
組み込み変数
特殊変数 | 意味 |
$0,$1,$2,$N | $0:引数の全てが入っている。 $1・・$N:$1:第一引数・・・$N:第N引数が入っている。 |
ARGC | 引数の数。 |
ARGV | コマンドライン引数の配列。 |
FS | 入力フィールドの区切り文字 |
OFS | 出力フィールドの区切り文字 |
RS | 入力レコードの区切り文字 |
ORS | 出力レコードの区切り文字 |
NF | カレントレコードのレコード番号 |
NR | レコードの番号 |
配列
配列
通常のプログラミング言語でいうところの配列と、連想配列を扱うことができる。
1次元配列
$ cat array_01.awk
BEGIN{
array[1]="test01"
array[2]="test02"
array[3]="test03"
array[4]="test04"
array[5]="test05"
for(i=1;i<=5;i++){
print i,array[i];
}
}
$ awk -f array_01.awk
1 test01
2 test02
3 test03
4 test04
5 test05
2次元配列
$ cat data.txt
0123 456 789
ABC EFG HIJ
abc efg hij
987 654 321
cat array_02.awk
{
for(i=1;i<=NF;i++){
array[FNR][i]=$i
}
}
END{
for(i=1;i<=FNR;i++){
for(j=1;j<=NF;j++){
printf("array[%d][%d]=%s\n",i,j array[i][j])
}
}
}
$ awk -f array_02.awk data.txt
array[1][1]=0123
array[1][2]=456
array[1][3]=789
array[2][1]=ABC
array[2][2]=EFG
array[2][3]=HIJ
array[3][1]=abc
array[3][2]=efg
array[3][3]=hij
array[4][1]=987
array[4][2]=654
array[4][3]=321
配列を消去
配列の消去
BEGIN{
array[1]="test01"
array[2]="test02"
array[3]="test03"
array[4]="test04"
array[5]="test05"
printf "before\n"
for(i=1;i<=5;i++){
print i,array[i];
}
delete array[2]
printf "after\n"
for(i=1;i<=5;i++){
print i,array[i];
}
}
awk -f array_00.awk data.txt
before
1 test01
2 test02
3 test03
4 test04
5 test05
after
1 test01
2
3 test03
4 test04
5 test05