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

awkを学ぶための実用的なガイド

そこにあるすべてのLinuxコマンド(そしてたくさんあります)の中で、最も典型的な3つはsedのようです 、awk 、およびgrep 。たぶんそれは彼らの名前の不可解な音、または彼らの潜在的な使用の幅、あるいは単に彼らの年齢ですが、誰かが「Linuxy」コマンドの例を挙げているとき、それは通常それらの3つのうちの1つです。そして、sed およびgrep いくつかの単純な1行の標準があり、あまり有名ではないawk 特に不可解であるために永続的に目立つままです。

sedを使用する可能性があります クイック文字列置換またはgrep 毎日パターンをフィルタリングします。 awkを作成する可能性ははるかに低くなります 指図。これがなぜなのかとよく疑問に思いますが、それはいくつかの理由によるものです。まず第一に、私たちの多くはほとんどsedを使用していません およびgrep これらの2つのコマンドのバリエーション以外の場合:

$ sed -e 's/foo/bar/g' file.txt
$ grep foo file.txt

その他のLinuxリソース

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

したがって、sedの方が快適だと感じるかもしれませんが およびgrep 、あなたはそれらの可能性を最大限に活用することはできません。もちろん、sedについて詳しく知る義務はありません。 またはgrep 、しかし私は時々コマンドを「学ぶ」方法について疑問に思います。 方法を学ぶ代わりに コマンドは機能しますが、コマンドを含む特定の呪文をよく学びます。その結果、私はしばしばコマンドに誤った親しみを感じます。コマンドの機能がわからず、構文に指を置くことができなくても、頭のてっぺんから3つまたは4つのオプションに名前を付けることができるので、コマンドを知っていると思います。

そしてそれが、awkのパワーと柔軟性に直面したときに多くの人が直面する問題だと私は信じています。 。

awkを使用するためのawkの学習

awkの基本 驚くほどシンプルです。 awk はプログラミング言語であり、比較的基本的な言語ですが、それは事実です。これは、awkを学ぶことができることを意味します 新しいコーディング言語を学ぶのと同じ方法です。いくつかの基本的なコマンドを使用して構文を学び、複雑なアクションを構築できるように語彙を学び、練習、練習、練習します。

awkが入力を解析する方法

Awk 入力は、基本的に配列と見なされます。 awkの場合 テキストファイルをスキャンし、各行を個別に連続してレコードとして扱います。 。各レコードはフィールドに分割されます 。もちろん、awk この情報を追跡する必要があり、NRを使用してそのデータを確認できます (レコード数)およびNF (フィールド数)組み込み変数。たとえば、これによりファイルの行数がわかります:

$ awk 'END { print NR;}' example.txt
36

これにより、awkについての情報も明らかになります。 構文。 awkを書いているかどうか ワンライナーまたは自己完結型スクリプトとして、awkの構造 指示は次のとおりです:

pattern or keyword { actions }

この例では、単語END パターンではなく、特別な予約キーワードです。同様のキーワードはBEGINです 。これらのキーワードの両方を使用して、awk データの解析の開始時または終了時に中かっこでアクションを実行するだけです。

パターンを使用できます awkとなるように、フィルターまたは修飾子として パターンを現在のレコードに一致させることができる場合にのみ、特定のアクションを実行します。たとえば、awkを使用するとします。 、grepと同じように 、 Linuxという単語を検索する テキストのファイル内:

$ awk '/Linux/ { print $0; }' os.txt
OS: CentOS Linux (10.1.1.8)
OS: CentOS Linux (10.1.1.9)
OS: Red Hat Enterprise Linux (RHEL) (10.1.1.11)
OS: Elementary Linux (10.1.2.4)
OS: Elementary Linux (10.1.2.5)
OS: Elementary Linux (10.1.2.6)

awkの場合 、ファイルの各行はレコードであり、レコードの各単語はフィールドです。デフォルトでは、フィールドはスペースで区切られます。 --field-separatorで変更できます FSを設定するオプション (フィールドセパレータ)任意の変数に変更できます:

$ awk --field-separator ':' '/Linux/ { print $2; }' os.txt 
 CentOS Linux (10.1.1.8)
 CentOS Linux (10.1.1.9)
 Red Hat Enterprise Linux (RHEL) (10.1.1.11)
 Elementary Linux (10.1.2.4)
 Elementary Linux (10.1.2.5)
 Elementary Linux (10.1.2.6)

このサンプルでは、​​各コロンの後に空白があるため、各リストの前に空白があります(: )ソーステキスト内。これはcutではありません ただし、フィールドセパレータを1文字に制限する必要はありません:

$ awk --field-separator ':' '/Linux/ { print $2; }' os.txt 
 CentOS Linux (10.1.1.8)
 CentOS Linux (10.1.1.9)
 Red Hat Enterprise Linux (RHEL) (10.1.1.11)
 Elementary Linux (10.1.2.4)
 Elementary Linux (10.1.2.5)
 Elementary Linux (10.1.2.6)

awkの関数

awkで独自の関数を作成できます この構文の使用:

name(parameters) { actions }

関数を使用すると、コードを1回記述して、作業全体で再利用できるため、関数は重要です。ワンライナーを作成する場合、カスタム関数はスクリプトよりも少し便利ではありませんが、awk すでに多くの関数を定義しています。これらは基本的に、他の言語やスプレッドシートの関数と同じように機能します。関数に情報が必要な順序を学習し、結果を得たいものは何でもフィードできます。

数学演算と文字列処理を実行する関数があります。数学のものはしばしばかなり簡単です。あなたは番号を提供し、それはそれをクランチします:

$ awk 'BEGIN { print sqrt(1764); }'
42

文字列関数はもっと複雑になる可能性がありますが、GNUawkマニュアルに詳しく記載されています。たとえば、split 関数は、awkというエンティティを取ります 単一のフィールドとして表示し、それをさまざまな部分に分割します。フィールド、分割の各部分を含む配列として使用する変数、および区切り文字として使用する文字が必要です。

前の例の出力を使用すると、各レコードの最後にIPアドレスがあることがわかります。この場合、レコードの最後のフィールドだけをsplitに送信できます。 変数NFを参照して関数を作成します フィールドの数が含まれているため(最後のフィールドは最大数である必要があります):

$ awk --field-separator ': ' '/Linux/ { split($NF, IP, "."); print "subnet: " IP[3]; }' os.txt
subnet: 1
subnet: 1
subnet: 1
subnet: 2
subnet: 2
subnet: 2
>

他にも多くの機能があり、awkのブロックごとに1つに制限する理由はありません。 コード。 awkを使用して複雑なパイプラインを構築できます ターミナルで、またはawkと書くことができます 独自の機能を定義して利用するためのスクリプト。

eBookをダウンロード

awkを学ぶ ほとんどの場合、awkを使用する必要があります 。 sedですでに持っている機能を複製することを意味する場合でも使用してください またはgrep またはcut またはtr またはその他の完全に有効なコマンド。慣れたら、カスタムのawkを呼び出すBash関数を記述できます。 使いやすいコマンド。そして最終的には、複雑なデータセットを解析するためのスクリプトを作成できるようになります。

ダウンロード 電子書籍 awkについて知っておくべきことをすべて学ぶ 、そして今日から使い始めてください。


Linux
  1. Linuxでのfirewalldの初心者向けガイド

  2. gawkの初心者向けガイド

  3. 私のお気に入りの8つの実用的なLinuxコマンド

  1. Linuxにアプリケーションをインストールするためのガイド

  2. systemdを愛することを学ぶ

  3. Linuxパーミッションのビギナーズガイド

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

  2. Linuxコマンド-完全ガイド

  3. LinuxのAwkコマンド