(87) awk の使い方備忘録

投稿者: | 2018年9月20日

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

カテゴリー: awk

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です