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

Linuxawkコマンドと10の例

コンピュータシステムは、単純なテキストファイルに保存されている貴重なデータを分析するために常に使用されてきました。次に、コンピュータシステム自体はログファイルを介して管理されます。これらの2つの状況で潜在的に一般的なのは、大量のデータを保持していることです。多くの場合、実際にデータを読み取る前に合理化する必要があります。そうでなければ、それはただ混乱します。

たとえば、表形式で配置されたデータを読み取る場合、一部の列は必要ですが、他の列は必要ありません。

この要件は当時でも悲惨なものでした。その結果、GNUプロジェクトには、ユーザーがデータをフィルタリングして抽出し、エクスペリエンスを向上させるのに役立つすばらしいツールがあります。そのツールはAWK

歴史

AWKは、実際にはテキスト処理専用のプログラミング言語です。特定のパターンでのデータ抽出に使用されます。 1970年代に、ベル研究所、アルフレッドエイホ、ピーターワインバーガー、ブライアンカーニハンによって開発されました(彼らの名前のイニシャルが名前を生み出しました)。 awkの開発はそれだけではありません。新しいバージョンが1985年に導入され、awkコマンドに新しい変更が加えられました。これには、複数の入力ストリーム、計算された正規表現、ユーザー定義関数などを処理する機能が含まれます。つまり、この更新により、より強力なプログラミング言語になりました。

Awkの実装は異なります。標準的なアプローチを提供する適切な実装があることを確認するために、PaulRubinは1986年にgawkを作成しました。これは新しいawkでうまく機能しました。

それとは別に、1989年のSystem Vリリースでは、新しい機能が追加されました。開発者はまた、その暗い部分を改善し、プログラマーとユーザーがそれをよりよく使用できるようにしました。最新の変更は、awkがネットワークアクセスを確認した1997年に発生しました。これにより、ユーザーは問題をリモートで解決できるようになります。

2011年にJohnHaqueがgawkの内部を書き直したときに行われた最新の書き直し。

AWKでできること

ここまでで、AWKが何ができるかはある程度明確になっているはずです。これは、テキスト処理を処理できる汎用スクリプト言語です。上級ユーザーは、分析とレポートに使用することもできます。

AWKは、手続き型プログラミング言語ではなく、データ駆動型であるため、他のプログラミング言語とは異なります。つまり、これを効果的に使用して、テキスト入力に対するアクションを実行できます。つまり、データの変換、入力、および標準出力としての送信に使用できます。

つまり、AWKを使用して、各入力行をフィールドに分割したり、ファイルを1行ずつスキャンしたり、一致行でアクションを実行したりするなどの簡単な操作を実行できます。 awkコマンドは、プロシージャ形式のレポートやデータファイルの変換にも役立ちます。さらに、条件付き&ループ、文字列&算術演算、フォーマット出力行などのプログラミング構造にもアクセスできます。

awkの仕組み

このセクションでは、awkがどのように機能するかを学習します。 awkにはさまざまな実装があることを学ぶことが重要です。同じページにいることを確認するために、GNU実装について説明し、使用します。これは、一般にgawkとして知られています。ほとんどの場合、gawkはawkインタープリターにシンボリックリンクされています。

よく理解するには、まずレコードとフィールドを理解する必要があります。

awkがテキストストリームとデータファイルを処理できることはよく知られています。データを処理するために、入力はフィールドとレコードに分割されます。 awkが圧倒されないようにするために、入力の最後に到達するまで、常に1つのレコードが処理されます。さらに、レコードは、文字を使用したレコード区切り文字を使用して、さらに単純なセクションに分割されます。また、各レコードは改行文字を使用して区切られます。これは、各行をレコードと呼ぶことができることを意味します。

RS変数を使用して新しいレコード区切り文字を設定することを選択できます。

次は、フィールドセパレーターです。いつものように、各レコードにはフィールドがあり、フィールドセパレータを使用して区切られます。フィールド区切り文字は、空白、タブ、改行文字、およびスペースにすることができます。また、各フィールドは$記号を使用して参照されますが、フィールド番号は1で始まります。つまり、最初のフィールドは$ 1として示され、2番目のフィールドは$2として示されます。このように、n番目のフィールドは$nfとして表すことができます。

awkプログラム

awkの2番目の側面はawkプログラムです。 awkを使用する場合は、コマンドでテキストを実行または処理できるようにするプログラムを作成する必要があります。 awkプログラムは、ルールとユーザー定義関数を使用して多くの機能を提供します。ルールはアクションペアまたは1つのパターンで機能し、ルールはセミコロンまたは改行を使用して区切られます。

ご参考までに、awkプログラムは次のようになります。

pattern { action }
pattern { action }
....

つまり、awkプログラムは、パターンに基づいてレコードを照合することで機能します。パターンがレコードで見つかった場合は、それを処理します。そうでない場合は、レコード全体が一致して、ルールに基づいて何かが一致することを確認します。

awkコマンドの例

awkコマンドとその動作について十分に理解したので、次はawkコマンドの例をいくつか確認します。

これまでにawkを使用したことがない場合は、awkを次のようなオプションで使用できることを知っておくとよいでしょう。

awk options program file

awkで使用できるオプションは次のとおりです。

  • – fファイル:awkスクリプトを含むファイルを指定するために使用されます
  • -F fs:ファイルセパレータを指定するために使用されます。
  • -v var =value:変数を宣言するために使用されます。

例1:AWKスクリプトを読む

awkを使用する最も一般的な方法の1つは、スクリプトを読み取ることです。 Linuxユーザーは、一重引用符マーカーを使用してawkスクリプトを作成できます。

これを行うには、ターミナルで次のコマンドを入力する必要があります。

$awk '{print "Welcome to Hello, World -- AWK tutorial"}'

上記の例では、入力した内容が画面自体に返されます。コマンドは、CTRL+Dを押して終了するまで実行を続けます。

例2:複数のコマンドを使用する

awkのもう1つの一般的な使用法は、複数のコマンドを使用することです。ユーザーとして、2つのawkコマンドを1つに組み合わせて、目的の結果を得ることができます。この例では、文字列を出力してから、文字列の2番目の単語を新しい入力に置き換えます。

$echo "Hello World" | awk '{$2 = "Universe; print $0"}'

上記の例では、最初に「Hello、World」をターミナルにエコーしました。次に、別のawkコマンドを連結して、2番目の単語をUniverseに置き換え、最後に文字列であるHelloUniverseを出力しました。

例3:変数の使用

変数を使用すると、情報を保存してアクセスできます。あなたが以前にプログラミング言語を使用したことがあるなら、あなたは確かにそれらについて知っています。 awkの場合、テキストファイルを処理するために使用します。変数を使用すると、以下のようにファイル内の特定のデータフィールドにアクセスできます。

この目的のために、新しいテキストファイルmynewfileを作成しました。このファイルには、ランダムで美しい行を入力します。

次に、以下に示すように、コマンドを実行する必要があります。

awk '{print $1}' mynewfile

ご覧のとおり、ファイルからそのフィールドを示す特定の変数を出力します。また、私が作成したエラーが表示されるはずです。

例4:AWKの前処理

awkコマンドを使用すると、前処理を追加できます。そのためには、BEGINキーワードを使用する必要があります。

注意深くお読みになると、上記の新しいファイルが作成されました。 awk前処理を使用して、ファイルのコンテンツを紹介してみましょう。

コマンドは以下のとおりです。

awk 'awk BEGIN {print "The content of the file:"}
> {print $0}' , mynewfile

上記のスクリーンショットの例は正しくありません。 「BEGIN」の代わりに「Begin」を使用したため、printステートメントが実行されません。これを試してみて、結果がどうなるかを確認するために残しておきます!

例5:ファイルからスクリプトを読み取る

これはトリッキーです。ここでは、awkスクリプトを使用してファイルを読み取ることができます。

以下を含む新しいスクリプトを作成します。

{print $1 "universe starts at " $6"}

ファイルを新しいスクリプトとして保存しました。

次に、ターミナルで次のコマンドを実行します。

$awk -F: -f newscript /etc/passwd

魅力的ですよね!

例6:AWK後処理

次に、AWKの後処理を見てみましょう。前処理と同様に機能しますが、今回は後処理でENDコマンドを使用します。

$ awk 'BEGIN {print "The file content starts now:"}
>
> {print $0}
>
> END {print "The File ends"}' mynewfile

例7:ユーザー定義変数

数字やドル記号を使用せずに、awkコマンド内で変数を使用することもできます。

以下に例を示します。

$awk '
BEGIN{
test = "Welcome to FossLinux Awesome Linux Family"
print test
}
'

例8:組み込み関数

awkコマンドは、組み込み関数にも役立ちます。たとえば、数学関数や文字列関数を使用できます。

$ awk 'BEGIN {x - "fossLinux"; print toupper(x)}'
$ awk 'BEGIN {x=exp(35); print x}'

例9:印刷のフォーマット

awkに付属のprintf関数をフォーマットすることもできます。使用できる修飾子はたくさんあります。たとえば、cを使用して文字列として出力できます。整数値などにdを使用することもできます。

$ awk 'BEGIN {
x = 200 * 200
printf "The result is: %e\n", x
}'

例10:構造化コマンド

if、else、while、forループなどの構造化コマンドを使用することもできます。以下のifコマンドの例を見てみましょう。

$ awk '{if ($1 > 20) print $2}' mynewfile

結論

これで、awkコマンドチュートリアルは終了です。それで、あなたはそれが役に立つと思いましたか、そしてあなたはそれをあなたの仕事に使うつもりですか?以下にコメントしてお知らせください。


Linux
  1. 例を含むLinuxTeeコマンド

  2. 例を含むLinuxヘッドコマンド

  3. LinuxでのJQコマンドと例

  1. 例を含むwcLinuxコマンド

  2. Linuxのソートコマンドと例

  3. Linuxでのエコーコマンド(例付き)

  1. Linuxでのmanコマンドと例

  2. LinuxでのAWKコマンドと例

  3. LinuxでのCurlコマンドと例