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

強力なテキスト解析ツールであるawkの使用を開始する

Awkは、UnixおよびUnixライクなシステム向けの強力なテキスト解析ツールですが、一般的な解析タスクの実行に使用できるプログラム機能を備えているため、プログラミング言語とも見なされます。 。おそらくawkを使用して次のGUIアプリケーションを開発することはなく、デフォルトのスクリプト言語に取って代わることはないでしょうが、特定のタスクのための強力なユーティリティです。

それらのタスクが何であるかは驚くほど多様です。どの問題がawkによって最もよく解決されるかを見つける最良の方法は、awkを学ぶことです。 awkが、より少ない労力でより多くのことを成し遂げるのにどのように役立つかに驚くでしょう。

Awkの基本的な構文は次のとおりです。

awk [options] 'pattern {action}' file

開始するには、このサンプルファイルを作成し、 colours.txtとして保存します。

name       color  amount
apple      red    4
banana     yellow 6
strawberry red    3
grape      purple 10
apple      green  8
plum       purple 2
kiwi       brown  4
potato     brown  9
pineapple  yellow 5

このデータは、1つ以上のスペースで列に区切られています。分析しているデータが何らかの方法で整理されているのはよくあることです。空白で区切られた列、またはコンマやセミコロンであるとは限りませんが、特にログファイルやデータダンプでは、一般的に予測可能なパターンがあります。データのパターンを使用して、awkが焦点を当てたいデータを抽出して処理するのに役立てることができます。

列の印刷

awkでは、印刷 関数は、指定したものをすべて表示します。使用できる定義済みの変数は多数ありますが、最も一般的なもののいくつかは、テキストファイルの列を指定する整数です。試してみてください:

$ awk '{print $2;}' colours.txt
color
red
yellow
red
purple
green
purple
brown
brown
yellow

この場合、awkは $ 2で示される2番目の列を表示します 。これは比較的直感的であるため、おそらく$1を印刷すると推測できます。 最初の列を表示し、$3を印刷します 3番目を表示します。

すべてを表示するには 列には、 $ 0を使用します 。

ドル記号の後の数字( $ )はです 、つまり $ 2 および$(1 + 1) 同じことを意味します。

条件付きで列を選択

使用しているサンプルファイルは非常に構造化されています。ヘッダーとして機能する行があり、列は相互に直接関連しています。 条件付きを定義する 要件に応じて、このデータを確認するときにawkが返すものを限定できます。たとえば、「黄色」に一致する列2のアイテムを表示し、列1の内容を印刷するには:

awk '$2=="yellow"{print $1}' colours.txt
banana
pineapple

正規表現も機能します。この条件付きのルックは$2 文字pとの近似一致の場合 その後に任意の数の(1つ以上の)文字が続き、その後に pの文字が続きます。 :

$ awk '$2 ~ /p.+p/ {print $0}' colours.txt
grape   purple  10
plum    purple  2

数値はawkによって自然に解釈されます。たとえば、5より大きい整数を含む3番目の列を持つ行を印刷するには:

awk '$3>5 {print $1, $2}' colours.txt
name    color
banana  yellow
grape   purple
apple   green
potato  brown
フィールド区切り文字

デフォルトでは、awkはフィールド区切り文字として空白を使用します。ただし、すべてのテキストファイルがフィールドの定義に空白を使用しているわけではありません。たとえば、 colours.csvというファイルを作成します このコンテンツで:

name,color,amount
apple,red,4
banana,yellow,6
strawberry,red,3
grape,purple,10
apple,green,8
plum,purple,2
kiwi,brown,4
potato,brown,9
pineapple,yellow,5

コマンドでフィールドセパレータとして使用する文字を指定する限り、Awkはデータをまったく同じように扱うことができます。 -field-separatorを使用します (または単に -F 略して)区切り文字を定義するオプション:

$ awk -F"," '$2=="yellow" {print $1}' file1.csv
banana
pineapple
出力を保存する

出力リダイレクトを使用して、結果をファイルに書き込むことができます。例:

$ awk -F, '$3>5 {print $1, $2} colours.csv > output.txt

これにより、awkクエリの内容を含むファイルが作成されます。

その他のLinuxリソース

  • Linuxコマンドのチートシート
  • 高度なLinuxコマンドのチートシート
  • 無料のオンラインコース:RHELの技術概要
  • Linuxネットワーキングのチートシート
  • SELinuxチートシート
  • Linuxの一般的なコマンドのチートシート
  • Linuxコンテナとは何ですか?
  • 最新のLinux記事

ファイルを列データでグループ化された複数のファイルに分割することもできます。たとえば、各行に表示される色に応じてcolours.txtを複数のファイルに分割する場合は、awkにクエリごとにリダイレクトさせることができます。 awkステートメントにリダイレクトを含めることによって:

$ awk '{print > $2".txt"}' colours.txt

これにより、 yellow.txtという名前のファイルが生成されます 、 red.txt 、など。

次の記事では、フィールド、レコード、およびいくつかの強力なawk変数について詳しく学習します。


この記事は、コミュニティテクノロジーのポッドキャストであるHackerPublicRadioのエピソードを基にしています。


Linux
  1. Zshの使用を開始する

  2. lsの使用を開始する

  3. LinuxでPostgreSQLを使い始める

  1. 相互運用性のためのSambaの使用開始

  2. Linux用の多目的リレーツールであるsocatの使用を開始する

  3. LinuxでSSHを使い始める

  1. GnuCashの使用を開始する

  2. Etcher.ioを使い始める

  3. 方法:Ansibleを使い始める