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はショッピングカート内の商品の合計金額の計算を実現します

推薦する

Gobangゲームを実現するためのjsキャンバス

この記事では、Gobangゲームを実装するためのキャンバスの具体的なコードを参考までに共有します。具...

MySQL バッチ SQL 挿入パフォーマンス最適化の詳細な説明

大量のデータを扱うシステムの中には、クエリ効率の低さやデータの保存時間の長さといったデータベースの問...

Vue ルーティング this.route.push ジャンプ ページが更新されない場合の解決策

Vue ルーティング this.route.push ジャンプ ページが更新されない1. 背景概要:...

Baidu百科事典UIの開発動向について議論する

<br />百度百科事典の正式版がついにオンラインになりました。2年間の「テスト版」の帽...

Linux インストール Redis 実装プロセスとエラー解決

今日、redis をインストールしたところ、今までになかったいくつかのエラーが発生しました。ここで記...

Linux の操作とメンテナンスの基本 httpd 静的 Web ページ チュートリアル

目次1. ウェアハウスを使用してhttpd lrzsz解凍ファイルを作成する2. ソースコードファイ...

MySQL における exists、in、any の基本的な使い方

【1】存在するループを使用して外部テーブルを 1 つずつクエリし、各クエリの存在する条件ステートメン...

mysql8.0.19 でパスワードを忘れた場合の完璧な解決策

おすすめの読み物: MySQL 8.0.19 は、間違ったパスワードを 3 回入力するとアカウント ...

HTML+CSSを使用してマウスの動きを追跡する

ユーザーがプライバシーを意識するようになり、オンライン トラッキングに対する予防策を強化するにつれて...

Reactの簡単な紹介

目次1. CDNの紹介1.1 react (最初にインポート) 1.2 react-dom(後ほど紹...

mysql エラー 1033 を解決する方法: ファイル内の情報が正しくありません: 'xxx.frm'

問題の説明1. 収集ステーションのデータベース2. データが無い状態での移動は問題ありませんが、デー...

Docker マルチステージビルドを使用してイメージサイズを縮小する方法

この記事では、Docker のマルチステージ ビルド機能を使用してイメージ サイズを大幅に削減する方...

MySQL最新バージョン8.0.17解凍版インストールチュートリアル

個人的にはインストール版よりも解凍版の方がインストールしやすいと思います。早速、解凍版のインストール...

Linux で at および cron スケジュールタスクをカスタマイズする方法

Linux システムには 2 種類のスケジュールされたタスクがあります。1 つは 1 回だけ実行され...

インライン要素とブロック要素とは何ですか?

1. インライン要素はコンテンツの幅のみを占めますが、ブロック要素はコンテンツの量に関係なく行全体を...