Awk はテキスト ファイルを処理するためのアプリケーションであり、ほぼすべての Linux システムにこのプログラムが付属しています。 ファイルの各行を順番に処理し、その中の各フィールドを読み取ります。各行が同じ形式であるログや CSV などのテキスト ファイルの場合、awk が最も便利なツールになる可能性があります。 Awk はツール ソフトウェアであるだけでなく、プログラミング言語でもあります。ただし、この記事ではコマンドラインの使用方法のみを紹介しており、ほとんどの場合これで十分でしょう。 1. 基本的な使い方 awk の基本的な使い方は次のようになります。 # フォーマット $awk アクションファイル名 # 例 $awk '{print $0}' demo.txt 上記の例では、demo.txt は awk によって処理されるテキスト ファイルです。一重引用符内には中括弧があり、その中に各行の print $0 という処理アクションが含まれています。このうち、print は印刷コマンドであり、$0 は現在の行を表すので、上記コマンドの実行結果は各行をそのまま印刷することになります。 次に、標準入力 (stdin) を使用して上記の例を説明します。 $ echo 'これはテストです' | awk '{print $0}' これはテストです 上記のコードでは、print $0 は標準入力を再印刷するためのもので、これはテストです。 Awk は、スペースとタブに応じて各行を複数のフィールドに分割し、$1、$2、$3 を使用して最初のフィールド、2 番目のフィールド、3 番目のフィールドなどを表します。 $ echo 'これはテストです' | awk '{print $3}' 1つの 上記のコードでは、$3 は 3 番目のフィールド a を表し、これはテストです。 以下では、例として、/etc/passwd ファイルを demo.txt として保存します。 ルート:x:0:0:root:/root:/usr/bin/zsh デーモン:x:1:1:デーモン:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin 同期:x:4:65534:sync:/bin:/bin/sync このファイルのフィールド区切り文字はコロン (:) なので、区切り文字をコロンとして指定するには -F パラメータを使用する必要があります。次に、最初のフィールドを抽出できます。 $ awk -F ':' '{ $1 を印刷 }' demo.txt 根 デーモン ビン システム 同期 文法
変数 フィールドを表す $ + 数値に加えて、awk は他の変数もいくつか提供します。 変数 NF は現在の行にフィールドがいくつあるかを示します。したがって、$NF は最後のフィールドを表します。 $ echo 'これはテストです' | awk '{print $NF}' テスト $(NF-1) は最後から 2 番目のフィールドを表します。 $ awk -F ':' '{$1, $(NF-1) を印刷}' demo.txt ルート /ルート デーモン /usr/sbin ビン/ビン システム /dev 同期 /bin 上記のコードでは、print コマンド内のカンマは、出力時に 2 つの部分を区切るためにスペースが使用されることを示しています。 $ awk -F ':' '{print NR ") " $1}' デモ.txt 1) ルート 上記のコードでは、print コマンドで文字をそのまま出力したい場合は、文字を二重引用符で囲む必要があります。 awk のその他の組み込み変数は次のとおりです。 FILENAME: 現在のファイル名 3. 機能 Awk には、生データの処理を容易にするための組み込み関数もいくつか用意されています。 関数 toupper() は文字を大文字に変換するために使用されます。 $ awk -F ':' '{ 上限($1) を印刷 }' demo.txt 根 デーモン ビン システム 同期 上記のコードでは、出力時に最初のフィールドが大文字に変換されます。 その他、よく使われる機能は以下のとおりです。 tolower(): 文字を小文字に変換します。 awk の組み込み関数の完全なリストについては、マニュアル ページを参照してください。 IV. 条件 Awk を使用すると、出力条件を指定して、条件を満たす行のみを出力できます。 出力条件はアクションの前に記述する必要があります。 $ awk '条件アクション' ファイル名 以下の例をご覧ください。 $ awk -F ':' '/usr/ {print $1}' demo.txt 根 デーモン ビン システム 上記のコードでは、print コマンドの前に正規表現が付いており、usr を含む行のみが出力されます。 次の例では、奇数行のみ、および 3 行目以降の行のみを出力します。 # 奇数行を出力する $ awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt 根 ビン 同期 # 3行目以降を出力 $ awk -F ':' 'NR >3 {print $1}' demo.txt システム 同期 次の例では、最初のフィールドが指定された値と等しい行を出力します。 $ awk -F ':' '$1 == "root" {print $1}' demo.txt 根 $ awk -F ':' '$1 == "root" || $1 == "bin" {print $1}' demo.txt 根 ビン 5. if文 Awk は複雑な条件を記述するための if 構造を提供します。 $ awk -F ':' '{if ($1 > "m") print $1}' demo.txt 根 システム 同期 上記のコードは、最初のフィールドの最初の文字が m より大きい行を出力します。 if 構造では else 部分も指定できます。 $ awk -F ':' '{if ($1 > "m") の場合は $1 を出力し、そうでない場合は "---" を出力します}' demo.txt 根 --- --- システム 同期 6. 参考リンク Example、Greg Grothaus による Awk チュートリアル テキスト処理における Awk コマンドの 30 の例、Mokhtar Ebrahim 要約する 上記は編集者が紹介したLinx awk入門チュートリアルです。皆様のお役に立てれば幸いです。ご質問がございましたら、メッセージを残していただければ、編集者がすぐに返信いたします。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。 以下もご興味があるかもしれません:
|
>>: JSはショッピングカート内の商品の合計金額の計算を実現します
JS でよく使用されるイベントは次の通りです。ページイベント: load;フォーカス イベント: フ...
この記事では、MySQL 8.0.20 winx64 のインストールと設定方法を次のように説明します...
以下の内容では、隣接リストを使用してツリー構造を保存する MYSQL のプロセスとソリューションを紹...
1 背景JDK1.8-u181とTomcat8.5.53がインストールされました。インストール後、環...
1. mysqlbinlog: [エラー] 不明な変数 'default-character...
デスクトップ プラットフォームの Web レイアウトのメタ タグは誰もがよく知っています。これは常に...
目次間違い1: データの列が多すぎる誤解2: 共同クエリが多すぎる誤解3: ENUMの代わりにSET...
1. 背景最近、独立した開発者がUIデザインを行うのを支援するために、uideaというWebサイト...
1. 問題の原因友人の @水米田 から、POSITION に基づくマスタースレーブについて質問があり...
序文Bash には、ls、cd、mv などの重要な組み込みコマンドが多数あるほか、grep、awk、...
デフォルトのテーブル名はbase_dataで、json列名はjson_valueです。 json_v...
序文今日、自作のコンポーネントを使っていたところ、突然、長い間忘れていたバブリングイベントに遭遇しま...
目次主キー制約一意の主キー非 Null 制約デフォルトの制約外部キー制約1NF 2NF 3NFデータ...
序文前回の面接では、実行計画について質問されたとき、多くの人がそれが何なのか知りませんでした。実行計...
準備: 1. VMwareワークステーションソフトウェアをインストールする2. Kali Linux...