未分類

awk 入門

書式

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

-未分類