3,509 views
この記事は最終更新から 1793日 が経過しています。
文字の集まりの中から任意の位置の文字を切り出したい時に awk が便利だ。
Case 1 : dfコマンドの出力情報から任意の項目のみを抜き出す。
何もしないとこんな感じで出力される。
$ df | sort /dev/sda1 1038336 219652 818684 22% /boot /dev/sda2 248887568 6628712 242258856 3% / /dev/sdb1 314419200 3593432 310825768 2% /var /dev/sdb3 609461500 13866232 595595268 3% /home
awkでは、文字間のセパレータを指定しない場合、空白をセパレータとする。
そして、分割した文字に対して、先頭から $1, $2, $3, … $NF でアクセスできる。
3列目の「使用量」だけを抜き出して表示してみる。
1行を空白で分割した 3個目の文字なので $3 でアクセスできる。
$ df | sort | awk '{print $3}'
219652
6628712
3593432
13866232
3列目の「使用量」と6列目の「マウント場所」の 2項目だけを抜き出してみる。
$ df | sort | awk '{print $3 $6}'
219652/boot
6628712/
3593436/var
13866232/home
3列目と 6列目がくっついて表示されて見づらい。
→ 間に「:」を入れてみる。
$ df | sort | awk '{print $3 ":" $6}'
219652:/boot
6628712:/
3593436:/var
13866232:/home
6列目の方を先に表示してみる。
同時に「:」だと間が狭いので「 : 」にしてみる。
$ df | sort | awk '{print $6 " : " $3}'
/boot : 219652
/ : 6628712
/var : 3593436
/home : 13866232
Case 2 : dateコマンドの出力情報から時分秒を抜き出す。
何もしないとこんな感じで出力される。
$ date 2018年 9月 20日 木曜日 21:31:14 JST
まずは時刻だけを抜き出す。時刻は空白をセパレータとして 5個目だ。
$ date | awk '{print $5}'
21:32:55
時分秒は「:」をセパレータとしているので、awk に -F オプションでこれを指定する。
$ date | awk '{print $5}' | awk -F':' '{print $1 "時" $2 "分" $3 "秒"}' 21時34分48秒
Case 3 : pwdコマンドの出力情報から末端のディレクトリ名を抜き出す。
分割した最後の 1要素へは $NF でアクセスできる。
$ pwd
/home/user/MyWork/test/001_tmp
$pwd | awk -F'/' '{print $NF}'
001_tmp