Awk は、テキスト ファイルを操作および処理する強力な言語です。これは、テキスト ファイル内の行がレコード形式である場合に特に役立ちます。つまり、区切り記号で区切られた複数のフィールドを含むレコード。入力ファイルがレコード形式でない場合でも、awk を使用して基本的なファイルおよびデータ処理を行うことができます。また、処理する必要のある入力ファイルがない場合でも、awk を使用してプログラミング ロジックを記述することができます。
要するに、AWK は強力な言語であり、日常業務を行うのに便利です。
awk を初めて使用する場合は、まず、Awk チュートリアル シリーズの一部であるこの Awk 入門チュートリアルを読んでください。
AWK の学習曲線は、他の言語の学習曲線よりもはるかに小さいです。すでに C プログラムを知っている場合は、AWK を簡単に学習できることを理解していただけるでしょう。
AWK は当初、A. Aho、B. W. Kernighan、P. Weinberger の 3 人の開発者によって作成されました。そのため、AWK という名前は、これら 3 人の開発者のイニシャルに由来しています。
以下は、AWK の 3 つのバリエーションです。
1.わかりました
AWK は、A. Aho、B. W. Kernighan、P. Weinberger によって書かれたオリジナルの AWK です。
2.ノーク
NAWKは「新しいAWK」の略です。これは Awk の AT&T バージョンです。
3.ガウク
GAWK は「GNU AWK」の略です。すべての Linux ディストリビューションには GAWK が付属しています。これは、AWK および NAWK と完全に互換性があります。
Linux では、awk または gawk のいずれかを入力すると、GAWK が呼び出されます。 awk は、Linux システムでは以下に示すように gawk にリンクされています。
# ls -l /bin/awk /usr/bin/awk lrwxrwxrwx 1 root root 4 Jan 5 23:13 /bin/awk -> gawk lrwxrwxrwx 1 root root 14 Jan 5 23:13 /usr/bin/awk -> ../../bin/gawk
次の表は、これらのバージョンで使用できるさまざまな機能をまとめたものです。以下に示すように、gawk は元の awk と nawk のすべての機能を含むスーパーセットです。
Awk Vs Nawk Vs Gawk
Awk と Nawk と Gawk の違いを PDF チートシート形式でダウンロードしてください。
次の基本的な組み込み変数 FS、OFS、RS、ORS、NR、NF、および FILENAME は、awk のすべてのバージョンで使用できます。
機能 | 説明 | AWK | NAWK | GAWK |
---|---|---|---|---|
FS | 入力欄区切り | はい | はい | はい |
OFS | 出力フィールド区切り | はい | はい | はい |
RS | レコード区切り | はい | はい | はい |
ORS | 出力レコード区切り | はい | はい | はい |
NR | レコード番号 | はい | はい | はい |
NF | レコード内のフィールド数 | はい | はい | はい |
ファイル名 | 処理中の現在の入力ファイルを含む | はい | はい | はい |
次のすべての機能は、元の awk では使用できません。以下に示すように、nawk および/または gawk で利用できます。
機能 | 説明 | NAWK | GAWK |
---|---|---|---|
FNR | ファイル「レコード番号」 | はい | はい |
ARGC | awk スクリプトに渡された合計数または引数 | はい | はい |
ARGV | すべての awk スクリプト引数を含む配列 | はい | はい |
ARGIND | 現在のファイル名を取得するための ARGV へのインデックス | はい | |
SUBSEP | 配列インデックスの添字セパレータ | はい | はい |
RSTART | Match 関数は、RSTART を str2 内の str1 の開始位置に設定します | はい | はい |
長さ | Match 関数は RLENGTH を str1 の長さに設定します | はい | はい |
OFMT | Awk はこれを使用して値を出力する方法を決定します。デフォルトは「%.6g」です | はい | はい |
環境 | すべての環境変数と値を含む配列 | はい | |
IGNORECASE | デフォルトは 0 です。1 に設定すると、文字列と正規表現の比較で大文字と小文字が区別されません。 | はい | |
エラー | I/O 操作のエラー メッセージが含まれます。例えばgetline 関数の使用中。 | はい | |
BINMODE n | I/O のバイナリ モードを設定します。 n は 1 (入力ファイル)、2 (出力ファイル)、または 3 (すべてのファイル) のいずれかです。 | はい | |
CONVFMT | 数値を文字列に変換するときに使用される形式。 | はい | |
FIELDWIDTHS n | n は、列幅を示すスペース区切りの数値です。これが利用可能な場合、gawk は FS の代わりにこれを使用します。 | はい | |
LINT n | n は数値にすることができます。 n がゼロ以外の数値 (true を示す) の場合、gawk は致命的、無効、または警告の lint メッセージを表示します (–lint コマンドラインと同じ) | はい | |
TEXTDOMAIN | これは国際化に使用されます。 | はい | |
sub(str1,str2,var) | 入力文字列 (var) では、str1 が str2 に置き換えられ、出力が var に格納されます | はい | はい |
gsub(str1,str2,var) | サブと同じですが、グローバルです。同じ入力文字列 (var) に対して複数の置換を行います。 | はい | はい |
マッチ(str1,str2) | str1 が str2 に存在する場合、正の数を返します。 | はい | はい |
getline 別の入力ファイルから次の行を読み取ります。 $0、NF を設定 | はい | はい | |
getline var <ファイル | 別の入力ファイルから次の行を読み取り、変数 (var) に格納します | はい | はい |
toupper(str) | str を大文字に変換します | はい | |
tolower(str) | str を小文字に変換します | はい | |
|& | awk コマンドと外部プロセス間の双方向通信 | はい | |
systime() | エポック時間での現在の時間。 strftime と組み合わせます。例えばprint strftime(“%c”,systime()) | はい |