awkコマンドのprintで区切り文字を指定し、文字列を抽出する

awkコマンドのprintで区切り文字を指定し、文字列を抽出する

awkコマンドで文字列を抽出する場合、printを指定します。$0で行全体を、$nで区切り文字で区切られた部分を取得することができます。

awkにprintを指定して、文字列を抽出することができます。

行全体を抽出

以下コマンドでaccess.logの末尾3行を出力します。

awk '{ print $0 }' /var/log/nginx/access.log | tail -n 3

printに$0を指定することで、以下のように行すべてが出力されます。

XXX.XXX.XXX.XXX - - [11/Sep/2024:11:39:42 +0000] "GET XXX HTTP/1.1" 200 20328 "https://it-life.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"
XXX.XXX.XXX.XXX - - [11/Sep/2024:11:39:42 +0000] "GET XXX HTTP/1.1" 200 511 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"
XXX.XXX.XXX.XXX - - [11/Sep/2024:11:39:43 +0000] "GET XXX HTTP/1.1" 200 243698 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0"

区切り(スペース)の4、5項目を抽出

以下コマンドで、aaccess.logの末尾3行のタイムスタンプを出力します。

awk '{ print $4,$5 }' /var/log/nginx/access.log | tail -n 3

printに$4,$5のようにカンマ区切りで指定することで、スペース区切りの4,5項目が出力されます。

[11/Sep/2024:11:39:42 +0000]
[11/Sep/2024:11:39:42 +0000]
[11/Sep/2024:11:39:43 +0000]

カンマ区切りの項目を抽出

以下ファイルを例に確認します。

$ cat sample.csv
aaa,bbb,ccc
ddd,eee,fff
ggg,hhh,iii

以下コマンドで、CSVファイルの2列目を取得します。

awk -F'[,]' '{ print $2 }' sample.csv

-Fに'[,]'を指定することで、区切り文字をカンマ「,」へ変えることができます。
以下のように、2列目が出力されることを確認しました。

bbb
eee
hhh

まとめ

  • printに以下組み込み変数を指定して、値を抽出することができる。
組み込み変数説明
$0レコード
$nレコードのn番目のフィールド
  • -Fオプションを指定して、区切り文字を変更できる。(デフォルトはスペース)

以上で本記事の解説を終わります。
よいITライフを!
Scroll to Top