📘
【Linux】awkの使い方(メモ)
はじめに
テキストファイルを加工する際によく使用するawkコマンドについて、自分の知っている範囲で記事に書きたいと思います。
awkとは?
プログラミング言語の一つになります。
「オーク」と呼びます。
テキストファイルの加工・抽出等の処理が得意な言語になります。
awkの使用例
ls -l
の結果から所有者/グループ名/ファイル名を抜き出す。
通常のコマンド実行結果(ls -l)
[cloudadmin@testlinux01 test]$ ls -l
合計 0
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 hello.awk
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 sample.awk
[cloudadmin@testlinux01 test]$
awkを使用した実行結果
[cloudadmin@testlinux01 test]$ ls -l | awk '{print $3,$4,$9}'
cloudadmin cloudadmin hello.awk
cloudadmin cloudadmin sample.awk
[cloudadmin@testlinux01 test]$
「$3」や「$0」について
フィールドになります。
{ print $0 } # レコード全体を表示
{ print $1, $2, $3 } # 第1、第2、第3フィールドを表示
以下のコマンドの実行結果をフィールドで表します。
コマンド実行例
[cloudadmin@testlinux01 test]$ ls -l
合計 4
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 hello.awk
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 sample.awk
-rw-rw-r--. 1 cloudadmin cloudadmin 33 12月 4 13:58 test.txt
[cloudadmin@testlinux01 test]$
フィールド/レコード | $1 | $2 | $3 | $4 | $5 | $6 | $7 | $8 | $9 |
---|---|---|---|---|---|---|---|---|---|
1 | -rw-rw-r--. | 1 | cloudadmin | cloudadmin | 0 | 12月 | 4 | 13:34 | hello.awk |
2 | -rw-rw-r--. | 1 | cloudadmin | cloudadmin | 0 | 12月 | 4 | 13:34 | sample.awk |
3 | -rw-rw-r--. | 1 | cloudadmin | cloudadmin | 33 | 12月 | 4 | 13:58 | test.txt |
- レコード全体を表示する。
コマンド実行例
[cloudadmin@testlinux01 test]$ ls -l | awk '{print $0}'
合計 4
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 hello.awk
-rw-rw-r--. 1 cloudadmin cloudadmin 0 12月 4 13:34 sample.awk
-rw-rw-r--. 1 cloudadmin cloudadmin 33 12月 4 13:58 test.txt
[cloudadmin@testlinux01 test]$
- レコード「$4」を抽出する。
コマンド実行例
[cloudadmin@testlinux01 test]$ ls -l | awk '{print $4}'
cloudadmin
cloudadmin
cloudadmin
[cloudadmin@testlinux01 test]$
- grepと組み合わせる。
コマンド実行例
[cloudadmin@testlinux01 test]$ ls -l | grep hello.awk | awk '{print $1,$3,$4,$9}'
-rw-rw-r--. cloudadmin cloudadmin hello.awk
[cloudadmin@testlinux01 test]$
特定のファイル名を抽出する。
/etc/passwd
からcloudadmin
の行を抽出します。grep
と同じ使い方です。
grepにて抽出
[cloudadmin@testlinux01 ~]$ cat /etc/passwd | grep cloudadmin
cloudadmin:x:1000:1000:cloudadmin:/home/cloudadmin:/bin/bash
[cloudadmin@testlinux01 ~]$
- コマンド構文
コマンド
awk '/文字列/' ファイル名
- 実行例
awkにて抽出
[cloudadmin@testlinux01 ~]$ awk '/cloudadmin/' /etc/passwd
cloudadmin:x:1000:1000:cloudadmin:/home/cloudadmin:/bin/bash
[cloudadmin@testlinux01 ~]$
テキストファイルから一致している文字列を抜き出す
テキストファイルから一致している文字列があれば抜き出します。
- コマンド構文
コマンド
awk '$0 == "文字列" { print $0}' ファイル名
- 実行例
実行例
[cloudadmin@testlinux01 test]$ awk '$0 == "foo" { print $0}' test.txt
foo
[cloudadmin@testlinux01 test]$
指定した行を抜き出す
以下ファイルより2行目を抜き出します。
test.txt
foo
82niupfa
fajaf
test
testtest
- コマンド構文
コマンド
awk ' NR == 行数 { print $0 }' ファイル名
- 実行例
実行例
[cloudadmin@testlinux01 test]$ awk ' NR == 2 { print $0 }' test.txt
82niupfa
[cloudadmin@testlinux01 test]$
参考
awkって何?何ができるの?をできる限りわかりやすく伝えたい
[初心者向け]Awkの使い方
とほほのAWK入門
awkでgrepのように行を抽出する
Discussion