Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxのawkコマンドの学習経験

Linuxのawkコマンドの学習経験

  

awkはgrep検索、sed編集と比較して強力なテキスト分析ツールであり、awkはデータ分析とレポート生成において特に強力です。簡単に言うと、awkはファイルを1行ずつ読み取り、デフォルトの区切り文字としてスペースを使用して各行をスライスし、次にカット部分が分析されます。使い方:awk '{pattern + action}' {filenames}

ここで、patternはAWKがスラッシュで囲んでデータ内で探すものを表し、正規表現を受け入れます。実行された一連のコマンド通常、awkはファイルの処理単位です。 awkがファイルの1行を受け取るたびに、対応するコマンドを実行してテキストを処理します。

awkを呼び出す3つの方法:

コマンドラインモード:awk [-F field-separator] 'commands'入力ファイル

ここで、commandsは実際のawkコマンド[-F field separator]はオプションです。入力ファイルは処理されるファイルです。 awkでは、ファイルの各行において、ドメイン区切り文字で区切られた各項目はフィールドと呼ばれます。通常、名前のない-Fドメイン区切り文字の場合、デフォルトのドメイン区切り文字はスペースです。 -F使用方法(例:):-F:または-F ':'

シェルスクリプトモード:

すべてのawkコマンドをファイルに挿入して、awkプログラムを使用可能にします。スクリプトの最初の行として実行してからawkコマンドインタプリタを実行し、スクリプト名を入力して再度呼び出します。シェルスクリプトの1行目と同じ:#!/bin /shは、次のように置き換えることができます。#!/bin /awk

すべてのawkコマンドを1つのファイルに挿入してから、次のコマンドを呼び出します。awk -f awk-script -file input-file(s)

-fオプションを指定するとawkスクリプトがawk-script-fileにロードされますが、input-file(s)は処理対象のファイルです。 (Fの場合に注意してください)


はじめに:

awkのワークフローは次のようなものです: '\\ n'改行でレコードを読む次に、指定したドメイン区切り記号でレコードを分割し、ドメインを埋めます。$ 0はすべてのドメインを意味し、$ 1は最初のドメインを意味し、$ nはn番目のドメインを意味します。デフォルトのドメイン区切り記号は"空白キー"です。; [タブ]キー"

/etc /passwdを表示しているアカウントだけの場合#cat /etc /passwd | Awk -F ':' '{print $ 1}'

rootbindaemonadmlp

パスワードファイルを読み込み、区切り文字として":"を付けてスライスし、最初のフィールドを出力します情報です。これが{print $ 1}です。

/etc /passwdアカウントとそのアカウントに対応するシェルを表示するだけで、アカウントとシェルがタブで区切られている場合は、次のように入力します。 Awk -F ':' '{$ 1" \\ t" $ 7}を印刷します。

root /bin /bashdaemon /bin /shbin /bin /shsys /bin /sh

{}文字列は""と共に含める必要があります。

/etc /passwdアカウントとそれに対応するアカウントのシェルを表示し、アカウントとシェルをコンマで区切って、すべての行にシェル名shellを追加する場合は、最後の行に" blueを追加します。 /bin /nosh":cat /etc /passwd | Awk -F ':' 'BEGIN {プリント名、シェル} {プリント$ 1'、 '$ 7} END {プリント'青、/bin /nosh"} '

name、shellroot 、/bin /bashdaemon、/bin /shbin、/bin /shsys、/bin/sh....blue,/bin/nosh

ここではBEGIN文とEND文が使用されており、構造はBEGIN {です。 (1)} {(2)} ... {(n)} END {...}。まずBEGINの直後に{(1)}を実行し、次にファイルを1行ずつ読み込んで{(2)}〜{(n)}アクションを実行し、最後にENDの後に{...}を実行します。 ENDの後に{...}が複数ある場合は、END以外のすべての{...}が実行されます。

/etc /passwd内のrootキーワードのすべての行を検索します。#awk -F: '/root /' /etc /passwd

root:x:0:0:root:/Root:/bin /bash

patternに一致する行(ここではroot)がアクションを実行します(アクションは指定されていません。デフォルトの出力は各行の内容です)。

/etc /passwdを検索すると、rootキーワードのすべての行が表示され、対応するシェルが表示されます。#awk -F: '/root /{print $ 7}' /etc /passwd

/Bin /bash

最初に" root"を見つけ、次にアクション{print $ 7}を実行します。


awkの組み込み変数

awkには多くの組み込み変数があります環境情報を設定します。これらの変数は変更することができます。最も一般的に使用される変数は以下の通りです。 ARGCコマンドラインパラメータ番号ARGVコマンドラインパラメータの配置ENVIRONサポートキューシステム環境変数用途FILENAME awkブラウズファイル名FNRブラウズファイルレコード番号FS設定入力フィールドセパレータ、コマンドラインと同じ-FオプションNFブラウズレコードフィールド数NR読み取りレコード数OFS出力フィールド区切り記号ORS出力レコード区切り記号RS制御レコード区切り記号

統計/etc /passwdファイル名、1行あたりの行番号、1行あたり列数、対応するフルラインコンテンツ:#awk -F ':' '{print "filename:" FILENAME "、linenumber:" NR "、columns:" NF "、linecontent:" $ 0 '/etc /passwd

ファイル名:/etc /passwd、行番号:1、列数:7、行内容:root:x:0:0:ルート:/root:/bin /bashfilename:/etc /パスワード、行番号:2、列数:7、行コンテンツ:デーモン:x:1:1:デーモン:/usr /sbin:/bin /shファイル名:/etc /passwd、行番号:3、列数:7、行コンテンツ:bin:x :2:2:bin:/bin:/bin /shファイル名:/etc /passwd、行番号:4、列:7、行の内容:sys:x:3:3:sys:/dev:/bin /sh

Awkはprintとprintfのプリントアウトも提供しています機能print関数のパラメータは、変数、値、または文字列です。文字列は、カンマで区切って二重引用符で囲む必要があります。コンマがないと、パラメーターは連結されて区別できません。ここで、コンマの役割は出力ファイルの区切り文字と同じですが、後者はスペースです。 printf関数の使い方は基本的にc言語のprintfと似ており、文字列を整形することができます出力が複雑な場合はprintfの方が使いやすく、コードもわかりやすいです。

上記の例をprintfに変更します。awk -F ':' '{printf("ファイル名:%10s、行番号:%s、列:%s、linecontent:%s \\ n"、ファイル名、NR、NF、$ 0)} '/etc /passwd



awk簡単プログラミング

統計/etc /passwdアカウント番号:awk -F: 'BEGIN {count = 0} {count = count + 1} END {print" num is"、count}' /etc /passwd

countはカスタム変数です。前のアクション{}には1つの出力しかありません実際、printは単なるステートメントであり、アクション{}は複数のステートメントを;で区切って持つことができます。

フォルダ内のファイルによって占められているバイト数を統計的に数え、フォルダ数を数えます(サイズは通常4096です)。 Awk 'BEGIN {size = 0; folder = 0} {if($ 5!= 4096){size = size + $ 5;} {folder = folder + 1}} END {print "[end] size is"、size、 "M"、 "\\ nフォルダは"、フォルダ} '

ユーザー名をpasswdに記録するには配列を使用します。awk -F:' BEGIN {count = 0} {name [count] = $ 1; count = {count + 1} END {for(i = 0; i


Copyright © Windowsの知識 All Rights Reserved