文字列抽出で利用するawkコマンドの使い方を解説します。awkコマンドは、表形式で出力されるコマンド結果から、目的の情報を抽出したいときなどに活用できます。
目次
書式
awk [オプション] [コマンド] [ファイル...]
利用例
指定フィールドを表示
( '{print $1, $3}'
)
スペース
で区切られた 各フィールド
のうち、 特定フィールドのみ
表示します。
$ cat test.txt
1111 aaaa AAAA
2222 bbbb BBBB
3333 cccc CCCC
$ awk '{print $1, $3}' test.txt
1111 AAAA
2222 BBBB
3333 CCCC
区切り文字を変更
( -F
)
-Fオプション
で 区切り文字
を指定できます。
$ cat test.txt
1111,aaaa,AAAA
2222,bbbb,BBBB
3333,cccc,CCCC
$ awk -F',' '{print $1, $3}' test.txt
1111 AAAA
2222 BBBB
3333 CCCC
区切り文字に、:
/
の2つを指定してみます。
$ echo "111:aaa/bbb" | awk -F'[:/]' '{print $1, $3}'
111 bbb
パターンを指定
'パターン {アクション}'
と記述すると、 パターンに一致する行のみ
アクションを実施します。
以下例では、 行番号が1より大きく
かつ 5フィールド目が256である
という条件に一致する行のみ出力します。
$ ls -l
total 0
drwxr-xr-x 22 root staff 704 Apr 12 23:38 Auth
drwxr-xr-x 14 root staff 448 Apr 12 23:38 Broadcasting
drwxr-xr-x 6 root staff 192 Apr 12 23:38 Bus
drwxr-xr-x 26 root staff 832 Apr 12 23:38 Cache
drwxr-xr-x 4 root staff 128 Apr 12 23:38 Config
drwxr-xr-x 12 root staff 384 Apr 12 23:38 Console
drwxr-xr-x 7 root staff 224 Apr 12 23:38 Container
drwxr-xr-x 31 root staff 992 Apr 12 23:38 Contracts
drwxr-xr-x 6 root staff 192 Apr 12 23:38 Cookie
drwxr-xr-x 29 root staff 928 Apr 12 23:38 Database
drwxr-xr-x 5 root staff 160 Apr 12 23:38 Encryption
drwxr-xr-x 6 root staff 192 Apr 12 23:38 Events
drwxr-xr-x 8 root staff 256 Apr 12 23:38 Filesystem
drwxr-xr-x 22 root staff 704 Apr 12 23:38 Foundation
drwxr-xr-x 7 root staff 224 Apr 12 23:38 Hashing
drwxr-xr-x 16 root staff 512 Apr 12 23:38 Http
drwxr-xr-x 7 root staff 224 Apr 12 23:38 Log
drwxr-xr-x 14 root staff 448 Apr 12 23:38 Mail
drwxr-xr-x 20 root staff 640 Apr 12 23:38 Notifications
drwxr-xr-x 9 root staff 288 Apr 12 23:38 Pagination
drwxr-xr-x 6 root staff 192 Apr 12 23:38 Pipeline
drwxr-xr-x 32 root staff 1024 Apr 12 23:38 Queue
drwxr-xr-x 8 root staff 256 Apr 12 23:38 Redis
drwxr-xr-x 36 root staff 1152 Apr 12 23:38 Routing
drwxr-xr-x 16 root staff 512 Apr 12 23:38 Session
drwxr-xr-x 27 root staff 864 Apr 12 23:38 Support
drwxr-xr-x 8 root staff 256 Apr 12 23:38 Translation
drwxr-xr-x 17 root staff 544 Apr 12 23:38 Validation
drwxr-xr-x 13 root staff 416 Apr 12 23:38 View
$
$ ls -l | awk 'NR>1 && $5==256 {print $5, $9}'
256 Filesystem
256 Redis
256 Translation
特定行から特定行までを抽出
awkを利用すると、特定文字列が含まれている行
から 特定文字列が含まれている行
までの内容を抽出をすることができます。
<div>
<h1>Hello World</h1>
<ul class="list-main">
<li>aaaaa</li>
<li>bbbbb</li>
</ul>
<h3>Essential Links</h3>
<ul class="list-sub">
<li>11111</li>
<li>22222</li>
<li>33333</li>
</ul>
</div>
上記HTMLの <ul class="list-main">
から </ul>
までの行を抽出するには以下のようにします。
$ cat tmp.html | awk '/<ul class="list-main"/,/<\/ul/'
<ul class="list-main">
<li>aaaaa</li>
<li>bbbbb</li>
</ul>