Linx awk入門チュートリアルの詳細な説明

Linx awk入門チュートリアルの詳細な説明

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 [オプション パラメータ] 'script' var=値 ファイル

または

awk [オプション パラメータ] -f スクリプトファイル var=値 ファイル(複数可)

変数

フィールドを表す $ + 数値に加えて、awk は他の変数もいくつか提供します。

変数 NF は現在の行にフィールドがいくつあるかを示します。したがって、$NF は最後のフィールドを表します。

$ echo 'これはテストです' | awk '{print $NF}'
テスト
$(NF-1) は最後から 2 番目のフィールドを表します。
$ awk -F ':' '{$1, $(NF-1) を印刷}' demo.txt
ルート /ルート
デーモン /usr/sbin
ビン/ビン
システム /dev
同期 /bin

上記のコードでは、print コマンド内のカンマは、出力時に 2 つの部分を区切るためにスペースが使用されることを示しています。
変数 NR は、現在処理中の行を示します。

$ awk -F ':' '{print NR ") " $1}' デモ.txt

1) ルート
2) デーモン
3) ビン
4) システム
5) 同期

上記のコードでは、print コマンドで文字をそのまま出力したい場合は、文字を二重引用符で囲む必要があります。

awk のその他の組み込み変数は次のとおりです。

FILENAME: 現在のファイル名
FS: フィールド区切り文字。デフォルトはスペースとタブです。
RS: 行区切り文字。各行を区切るために使用されます。デフォルトは改行です。
OFS: 出力フィールドセパレーター。印刷時にフィールドを区切るために使用されます。デフォルトはスペースです。
ORS: 出力レコード区切り文字。印刷時にレコードを区切るために使用されます。デフォルトは改行文字です。
OFMT: デジタル出力のフォーマット。デフォルトは%.6g

3. 機能

Awk には、生データの処理を容易にするための組み込み関数もいくつか用意されています。

関数 toupper() は文字を大文字に変換するために使用されます。

$ awk -F ':' '{ 上限($1) を印刷 }' demo.txt
根
デーモン
ビン
システム
同期

上記のコードでは、出力時に最初のフィールドが大文字に変換されます。

その他、よく使われる機能は以下のとおりです。

tolower(): 文字を小文字に変換します。
length(): 文字列の長さを返します。
substr(): 部分文字列を返します。
sin(): 正弦。
cos(): コサイン。
sqrt(): 平方根。
rand(): 乱数。

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 ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Linux での awk 配列の基本的な使い方
  • Linux での sed コマンドと awk コマンドの使用に関する簡単な説明
  • LINUX の AWK 組み込み変数 FS、NF、NR、RT、RS、ORS、OFS の詳細な説明
  • Linux での sed と awk の使い方の詳細な説明
  • 1日1シェルコマンド Linuxテキストコンテンツ操作シリーズ - awkコマンド詳細説明
  • Linux正規表現awkの詳しい説明
  • awk正規表現と組み込み関数の使用方法の詳細な例
  • シェル正規表現: grep、sed、awk の実践ノート
  • マルコフ連鎖アルゴリズム(マルコフアルゴリズム)awk、C++、C言語実装コード
  • Awk コマンド、awk プログラミング言語の詳細な紹介と例
  • ファイルの列をコンマで区切る Linux awk の例

<<:  JSはストップウォッチタイマーを実装します

>>:  JSはショッピングカート内の商品の合計金額の計算を実現します

推薦する

モバイルデバイスでインラインスクロールを実装するための4つのソリューションの詳細な説明

ニーズの発見領域の一部のみスクロールでき、残りの部分は移動できない場合、どのような方法を使用しますか...

Nginx 仮想ホストを構成する 3 つの方法 (ドメイン名に基づく)

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮...

Vue の親子コンポーネントの値転送と一方向データフローの問題の詳細な説明

目次序文1. 親コンポーネントが子コンポーネントに値を渡す2. サブコンポーネントのprops型制約...

jsを呼び出すいくつかの方法が整理され、使用が推奨されています

a タグではクリック イベントがよく使用されます。 1. href="javascript...

mysql 一時テーブルの使用状況の分析 [クエリ結果は一時テーブルに保存できます]

この記事では、例を使用して MySQL 一時テーブルの使用方法を説明します。ご参考までに、詳細は以下...

docker を使って sonarqube を構築する方法

目次1. Dockerをインストールする2. ソナーイメージをインストールする3. ソナーを使ってコ...

MySQL 独立インデックスと共同インデックスの選択

複数列のインデックスについては、理解が不足していることがよくあります。よくある間違いは、多数の列に独...

VueでTypescriptの設定手順を使用する

目次1. TypeScriptが古いVueプロジェクトに導入されるVue+Typescript プロ...

JavaScriptはオブジェクトの不要なプロパティを削除します

目次例方法1: 削除方法2: 分解補充する要約するThinking シリーズは、10 分で実用的なプ...

MySQL に接続する際に Navicat for MySQL が 2005 エラーを報告する問題を解決する

前回の記事では、Navicat for Mysql 接続エラー 1251 (接続失敗) の問題を解決...

js での遅延読み込みとプリロードの具体的な使用法

遅延読み込み(レイジー読み込み)とプリロードは、Web 最適化によく使用される手段です。 。 1. ...

MySQL 5.7.23 解凍バージョンのインストールチュートリアル(画像とテキスト付き)

MySQLインストーラをダウンロードする公式ダウンロードアドレス: http://dev.mysq...

MySQLのFreeListメカニズムの詳細な説明

1. はじめにMySQL が起動すると、BufferPool が初期化されます。クエリ操作を実行する...

js を使用して USB スキャナー データを取得する方法

この記事では、USBバーコードスキャナデータを取得するjsの具体的なプロセスを参考までに紹介します。...