このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:アクションの省略:awkコマンド

アクションの省略:awkコマンド

 awkコマンドは、テキストデータを効率的に処理・解析するための強力なツールです。ここでは、awkコマンドにおけるアクションの省略について解説します。アクションを省略した場合のデフォルト動作や、省略時と明示的に記述した場合の違いを理解することで、awkをより効果的に活用できます。

awkコマンドの概要

 awkは、テキストファイルを行(レコード)と列(フィールド)に分割し、指定した条件(パターン)に基づいて処理(アクション)を行うためのプログラミング言語です。特にログ解析やデータ抽出など、テキスト処理において広く利用されています。

awkコマンドの書式

awkコマンドの基本的な書式は以下の通りです。

【書式】
awk 'パターン { アクション }' ファイル名

  • パターン:アクションを実行する条件を指定します。正規表現や比較演算子を用いて、各レコードに対する条件を設定します。
  • アクション:パターンにマッチしたレコードに対して実行する処理を記述します。{}で囲み、printや算術演算などを記述します。
  • ファイル名:処理対象のファイルを指定します。省略した場合は標準入力から読み込みます。

アクションの省略

 awkでは、アクションを省略した場合、自動的に{ print $0 }が実行されます。これは、パターンにマッチしたレコード全体を表示することを意味します。また、printアクション自体も引数を省略すると、デフォルトで$0(レコード全体)を表示します。

つまり、以下の3つのコマンドはすべて同じ動作をします。

1.アクションを省略

awk '$9 ~ /^host/'

2.アクションの引数を省略

awk '$9 ~ /^host/ { print }'

3.省略せずに明示的に記述

awk '$9 ~ /^host/ { print $0 }'

ポイント

  • $0:現在のレコード(行)全体を表します。
  • printの引数省略printだけを記述すると、デフォルトでprint $0と同じ動作になります。

省略は混乱を招く

 awkは省略記法が多く、初心者には混乱を招く可能性があります。コードの可読性と保守性を高めるためにも、可能な限り省略せずに明示的にアクションを記述することをおすすめします。

コマンド例と解説

1.アクションを省略

user01@ubuntu-vm:~$ ls -l /usr/bin | awk '$9 ~ /^host/'

解説

  • $9 ~ /^host/:第9フィールド(ファイル名)がhostで始まるかどうかをチェックします。
  • アクション省略:パターンにマッチしたレコード全体を表示します({ print $0 }が自動的に実行される)。

出力結果

-rwxr-xr-x 1 root root 121672  7月 17 03:16 host
-rwxr-xr-x 1 root root  35336  4月  5  2024 hostid
-rwxr-xr-x 1 root root  22760  4月  9  2024 hostname
-rwxr-xr-x 1 root root  31184  8月  8 23:51 hostnamectl

2.アクションの引数を省略

user01@ubuntu-vm:~$ ls -l /usr/bin | awk '$9 ~ /^host/ { print }'

解説

  • { print }printの引数を省略しており、デフォルトでprint $0と同じ動作になります。
  • 出力される内容はアクションを省略した場合と同じです。

出力結果

-rwxr-xr-x 1 root root 121672  7月 17 03:16 host
-rwxr-xr-x 1 root root  35336  4月  5  2024 hostid
-rwxr-xr-x 1 root root  22760  4月  9  2024 hostname
-rwxr-xr-x 1 root root  31184  8月  8 23:51 hostnamectl

3.省略せずに明示的に記述

user01@ubuntu-vm:~$ ls -l /usr/bin | awk '$9 ~ /^host/ { print $0 }'

解説

  • { print $0 }:パターンにマッチしたレコード全体を表示します。
  • 省略せずに明示的に記述することで、コードの意図が明確になります。

出力結果

-rwxr-xr-x 1 root root 121672  7月 17 03:16 host
-rwxr-xr-x 1 root root  35336  4月  5  2024 hostid
-rwxr-xr-x 1 root root  22760  4月  9  2024 hostname
-rwxr-xr-x 1 root root  31184  8月  8 23:51 hostnamectl

まとめ

  • アクションの省略awkではアクションを省略すると、自動的に{ print $0 }が実行されます。
  • printの引数省略printの引数を省略すると、print $0と同じ動作になります。
  • 可読性の向上:省略せずにアクションや引数を明示的に記述することで、コードの意図が明確になり、可読性と保守性が向上します。
  • おすすめ:特にチーム開発や他者と共有する場合は、省略を避けて明示的にコードを書くことを推奨します。

 awkコマンドを効果的に使いこなすためには、これらの省略ルールを理解しつつ、コードの可読性を意識することが重要です。