GNU/Linux >> Linux の 問題 >  >> Linux

AWK 対 NAWK 対 GAWK

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()) はい

Linux
  1. スマートクォートを変換するgawkスクリプト

  2. awkを使用したデータの抽出と表示

  3. 4 Awk If ステートメントの例 ( if, if else, if else if, :? )

  1. Linux での awk コマンドの例

  2. awk:コマンドが見つかりません

  3. Linuxでファイルサイズを監視する

  1. awkを使用して文字の頻度を計算します

  2. awk のデフォルトのフィールドセパレータ

  3. grep と awk の使用