BASHプログラミング
 Computer >> コンピューター >  >> プログラミング >> BASHプログラミング

Linuxでawkコマンドを使用する方法[例付き]

このガイドでは、Linuxでawkコマンドを使用する方法を、日常の便利な例とともに示しています。

AWK は、Linuxオペレーティングシステムで利用可能なテキストを検索および操作するためのツールと言語です。

awk コマンドと、パターンで定義されたテキストの関連するスクリプト言語検索ファイル 特定のアクションを実行します パターンに一致するテキスト上。

awk は、大きなテキストファイルまたは多数のテキストファイルからデータを抽出してレポートを作成するための便利なツールです。たとえば、ログの処理や、一定期間に大量のデータを収集した温度プローブなどのデータ記録デバイスの出力などです。 。データベースクエリからの出力にも使用できます。

awkをインストールする必要はありません。 Linuxシステムですでに利用可能になっているはずです。

awk構文

awkを使用するための構文 ターミナルでのコマンドは次のとおりです。

awk [PROGRAM] [INPUT FILES]

注:

  • [PROGRAM]は、実行する検索パターンとアクションです。これは、提供されたファイルに対してawkで実行するプログラムです
    • -f を使用して、インラインではなくテキストファイルとして提供することもできます。 オプション
  • [INPUT FILES]は、awkで処理するファイルです。スペースで区切られた複数のファイル、ディレクトリへのパス、または一致するファイルのパターンにすることができます
    • 入力ファイルが指定されていない場合、awkは別のコマンドからのパイプ出力で機能します

awkオプション

次のオプションをawkコマンドに指定できます。

-fプログラムファイル プログラムテキストは、コマンドラインからではなくファイルから読み取られます。複数の-fオプションが受け入れられます。
-F値 フィールドセパレータFSを値に設定します。
-v var =value プログラム変数varに値を割り当てます。

ご使用のバージョンのawkの実装固有のオプションについては、次のコマンドを実行してマニュアルを確認できます。

man awk

プログラムのアクションと変数

awkに提供するプログラム 提供するテキストファイルに対して何を行うかを決定します。 awkプログラムは次の形式を取ります:

CONDITION { ACTION }
CONDITION { ACTION }
...

状態 一致するテキストのパターンであり、アクション 一致したテキストに対して実行するアクションです。必要な数の条件とアクションを持つことができます。

アクション

提供されるアクションは、計算、変数、および関数の呼び出しを含むことができるコマンドです。一部の組み込み関数は実装固有であるため、これらについてはマニュアルを確認することをお勧めします。

レコード

awk 通常、テキストファイルの新しい各行はレコードとして扱われます。 オプションで特に指定されていない限り 。

フィールド

awk フィールドを示すために空白(スペース、タブ)を使用します レコード オプションで特に指定されていない限り 。

変数

awk には、自分で定義しなくても使用できる多くの組み込み変数があり、いくつかの一般的なシナリオをカバーしています。

変数 意味
$ 0 レコード全体を表します
$ 1、$ 2、$3… フィールド変数–レコード内の個々のテキストフィールドのテキスト/値を保持します
NR / N Rのアンバー ecords すべてのファイルからこれまでに読み取られた入力レコードの数の現在の数
FNR / F ile N Rのアンバー ecords 現在のファイルでこれまでに読み取られた入力レコードの数の現在のカウント–新しいファイルが開始されるたびに自動的にゼロにリセットされます
NF / N Fのアンバー ields 現在の入力レコードのフィールド数–レコードの最後のフィールドは、$ NFを使用して参照でき、最後から2番目のフィールドは$(NF-1)を使用して参照できます。
ファイル名 現在の入力ファイルの名前
FS / F ield S eparator レコード内のフィールドを区切るために使用される文字。デフォルトでは、スペースとタブ文字が含まれます
RS / R ecord S eparator ファイル内のレコードを区切るために使用される文字。デフォルトの改行
OFS / O utput F ield S eparator Awk出力のフィールドを区切るために使用される文字。デフォルトは単一のスペースです
ORS / O utput R ecord S eparator Awk出力のフィールドを区切るために使用される文字。デフォルトは改行です
OFMT / O utput F またはM a T 数値出力の形式–デフォルトの形式は“%。6g”

awkの使用例

これらの例では、 photos.txtという単一のテキストファイルを処理します。 、次のテキストが含まれています:

red rose
yellow daffodil
pink flamingo
white rose
blue iris
white lily
red peony
yellow orchid
purple foxglove

ファイルの内容を印刷する

次のawkコマンドは、awk print を使用して、ファイルの内容を端末に出力します。 機能:

awk '{print}' flowers.txt

ファイル内のレコード(行)の数を印刷する

awk 'END { print NR }' sample.txt

この例では、ファイルの行数を出力します:

9

正規表現を使用してファイル内のテキストを検索する

次のコマンドは、 roseの種類のみを説明するファイルの行を出力します。 :

awk '/rose/' flowers.txt

REGEXに注意してください (正規表現)構文は、検索するテキストを定義するために使用されます。

このコマンドは次のように出力します:

red rose
white rose

その他の正規表現

awk '/^p/' flowers.txt

このコマンドは、 pで始まるレコードのみを出力します :

pink flamingo
purple foxglove

フィールド変数の使用

フィールド変数を使用する 、 pで始まるレコードの最初のフィールドのみを出力できます

awk '/^p/ {print $1;}' flowers.txt

どちらが出力されますか:

pink
purple

他のプログラムからの出力の処理

パイプ 他のLinuxシェルプログラムからawkへの出力 処理用。この例では、 ls -lから出力を取得します。 コマンド。現在のディレクトリの内容を一覧表示し、5番目の内容を返します。 フィールド(ファイルのサイズ):

ls -l | awk '{print $5}'

次のように出力されます:

3104
3072
224
256

…(現在のディレクトリにあるファイルの数とファイルの大きさによって異なります)

組み込み変数の使用

awk '{print NR "-" $2 }' flowers.txt

このコマンドは、現在のレコード番号(ファイル行番号)の後に2番目のフィールド(花の名前)を出力します:

1-red rose
2-yellow daffodil
3-pink flamingo
4-white rose
5-blue iris
6-white lily
7-red peony
8-yellow orchid
9-purple foxglove

アクションの組み合わせ

条件 およびアクション &&を使用して組み合わせることができます このコマンドは、最初のフィールドにテキスト redが含まれているすべてのレコードを出力します 2番目のフィールドの文字数は5文字未満です。 :

awk '$1 ~ /red/ && length($NF) < 5 { print }' flowers.txt

注:

  • $NFの使用 $ 2 を使用する代わりに、2番目のフィールドに移動します –これは最後のフィールドであり、したがってNF(フィールド数)に等しいため可能です
  • length() 関数はフィールドの長さを計算するために使用されます

したがって、サンプルファイルから一致する単一のレコードを返します。

red rose

結論

awk Linuxには、理由からほぼ普遍的に含まれています。これは、テキストを検索および処理するための主要なツールであり、システムで問題が発生した場合にログエントリをすばやく見つけたり、調査用にキャプチャしたデータを処理したりするために使用できます。

大量のテキストファイルの単純な検索/置換以上のことを試みたことがあれば、実行しなくても、プログラムですべてのテキストを具体的に置換または更新できることの価値を理解できます。個々の検索/置換コマンド。

他のLinuxのヒントをチェックしてください!


  1. Linuxでssコマンドを使用してネットワーク接続を監視する方法

    Linuxを使用している場合は、ネットワークについてもっと知る必要がある時期が来るでしょう。これを行うのに役立つツールがいくつかあり、一部のツールは他のツールよりも複雑です。 ss コマンドは多くのマシンにインストールされていると信頼できるものなので、知っておくと便利です。 ssコマンドとは何ですか? 2文字のコマンドの名前は難解に見えるかもしれませんが、実際には非常に単純です。多くのLinux/Unixコマンドと同様に、名前はコマンドの機能の省略形です。ここで、ssはSocketStatisticsの略です。 Socket Statisticsは、古いnetstatに代わるものです。

  2. Linuxでwatchコマンドを使用する方法と例

    Linuxのwatchコマンドは1つのことを行います。コマンドを繰り返し、結果を繰り返し出力して、変更を監視できるようにします。使用方法は次のとおりです。 watchコマンド構文 watchコマンドの構文は次のとおりです。 watch OPTIONS COMMAND 注: オプション 以下の表のオプションのリストである必要があります。これにより、ウォッチのデフォルトの動作が変更されます。 コマンド コマンド 監視するコマンドです 繰り返し実行する必要があります。これは、出力を監視します 見る 中断されるまで実行されます(したがって、 CTRL+Cを押して終了します ) オプション 時