gawk Ⅰ
3918 ワード
awk vs gawk
VIのようなインタラクティブなテキストエディタ(interactive text editor)のほか、Linuxには2つのコマンドラインテキストエディタ(command line editor)があります.sedとgawkです.gawkについて説明します.
gawkはUnixのawkのGNUバージョンで、gawkはプログラミング言語で、以下のことができます.定義変数格納データ 数学および文字列演算子を使用してデータ を操作する if-thenやloop などの論理制御を追加データファイルからデータを抽出し、フォーマットの良いレポート を生成する.
gawk構文:
optionsパラメータは次のとおりです.
Option
Description
-F fs
インターバルの指定、データ行の分割
-f file
指定したファイルのプログラムコマンドを使用してデータを処理
-v var=value
変数およびデフォルトの定義
-mf N
Specifies the maximum number of fields to process in the data file
-mr N
Specifies the maximum record size in the data file
-W keyword
Specifies the compatibility mode or warning level for gawk
gawk program scriptは{}カッコで包む必要があります.gawkはプログラムスクリプトが文字列であると考えているので、単一引用符で囲む必要があります.
この行のスクリプトを実行すると、何も出力されず、入力を待っています.これはgawkにfileが指定されていないため、gawkはデフォルトでstdINからコンテンツを取得します.
gawkは、各行のデータを処理する際に、以下の変数を使用することができる.$0は、行全体のデータ を表します.$1は、データ行が分割する1番目のフィールド を表す.$2は、データ行が分割する2番目のフィールド を表す.$nは、データ行が分割するN番目のフィールド を表す.
gawkのデフォルトのフィールド分割子は、tabやスペースなどの任意の空白文字です.デフォルトの分割子を使用するには、次の手順に従います.
分割子の指定:
sedのように、コマンドラインで複数のプログラムスクリプトを使用する場合は、コマンドをセミコロンで区切る必要があります.
同様にsecondary promptも使用できます.
gawkは、ファイルからプログラムスクリプトを読み込むこともできます.
注意:gawkプログラムスクリプトでは変数を定義することもできます.また、変数を参照するときに$記号は必要ありません.
BEGINでは、gawkがデータ行を処理する前に実行するプログラムスクリプトを指定できます.
ENDでは、gawkがすべてのデータ行を処理した後に実行するプログラムスクリプトを指定できます.
script4.gawk内容:
注:
このスクリプトを使用してレポートを生成するには、次の手順に従います.
参考:Linux Command Line and Shell Scripting Bible 3 rd Edition第19章
VIのようなインタラクティブなテキストエディタ(interactive text editor)のほか、Linuxには2つのコマンドラインテキストエディタ(command line editor)があります.sedとgawkです.gawkについて説明します.
gawk
gawkはUnixのawkのGNUバージョンで、gawkはプログラミング言語で、以下のことができます.
gawk構文:
gawk options program file
optionsパラメータは次のとおりです.
Option
Description
-F fs
インターバルの指定、データ行の分割
-f file
指定したファイルのプログラムコマンドを使用してデータを処理
-v var=value
変数およびデフォルトの定義
-mf N
Specifies the maximum number of fields to process in the data file
-mr N
Specifies the maximum record size in the data file
-W keyword
Specifies the compatibility mode or warning level for gawk
Reading the program script from the command line
gawk program scriptは{}カッコで包む必要があります.gawkはプログラムスクリプトが文字列であると考えているので、単一引用符で囲む必要があります.
gawk '{print "Hello World!"}'
この行のスクリプトを実行すると、何も出力されず、入力を待っています.これはgawkにfileが指定されていないため、gawkはデフォルトでstdINからコンテンツを取得します.
print
コマンドは、印刷内容をstdOUTに送信します.gawkはsedのように、データストリームの内容を1行1行処理します.上記のgawkコマンドを終了するには、Ctrl+Dシミュレータファイル終了子EOFを使用します.Using data field variables
gawkは、各行のデータを処理する際に、以下の変数を使用することができる.
gawkのデフォルトのフィールド分割子は、tabやスペースなどの任意の空白文字です.デフォルトの分割子を使用するには、次の手順に従います.
$ cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
$ gawk '{print $1}' data2.txt
One
Two
Three
分割子の指定:
$ gawk -F: '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
Using multiple commands in the program script
sedのように、コマンドラインで複数のプログラムスクリプトを使用する場合は、コマンドをセミコロンで区切る必要があります.
$ echo "My name is Rich" | gawk '{$4="Christine"; print $0}'
My name is Christine
同様にsecondary promptも使用できます.
$ echo "My name is Colin" | gawk '{
> $4="f"
> print $0}'
My name is f
Reading the program from a file
gawkは、ファイルからプログラムスクリプトを読み込むこともできます.
$ cat script2.gawk
{
text = "'s home directory is "
print $1 text $6
}
$ gawk -F : -f script2.gawk /etc/passwd
root's home directory is /root
bin's home directory is /bin
daemon's home directory is /sbin
adm's home directory is /var/adm
lp's home directory is /var/spool/lpd
注意:gawkプログラムスクリプトでは変数を定義することもできます.また、変数を参照するときに$記号は必要ありません.
Running scripts before processing data
BEGINでは、gawkがデータ行を処理する前に実行するプログラムスクリプトを指定できます.
$ cat data3.txt
Line 1
Line 2
Line 3
$ gawk 'BEGIN {print "The data3 file contents:"} {print $0}' data3.txt
The data3 file contents:
Line 1
Line 2
Line 3
Running scripts after processing data
ENDでは、gawkがすべてのデータ行を処理した後に実行するプログラムスクリプトを指定できます.
$ gawk '
> BEGIN {print "The data3 file contents:"}
> {print $0}
> END {print "End of File"}' data3.txt
The data3 file contents:
Line 1
Line 2
Line 3
End of File
gawkスクリプトの作成
script4.gawk内容:
BEGIN {
print "The latest list of users and shells"
print " UserID \t Shell"
print "-------- \t -------"
FS=":"
}
{
print $1 " \t " $7
}
END {
print "This concludes the listing"
}
注:
FS
を使用して、データ行フィールド区切り記号(field separation character)を定義できます.このスクリプトを使用してレポートを生成するには、次の手順に従います.
gawk -f script4.gawk /etc/passwd
参考:Linux Command Line and Shell Scripting Bible 3 rd Edition第19章