awkについて のバックアップ(No.3)
awk †
awkはawkで何ページも書けちゃう内容なんだろうけど、とりあえず今日使ったやつだけ。
こんなテキストファイルがあります。このテキストファイルの名前が「Address.txt」だとします。
まあ、アドレス帳だと思ってください。
firstName lastName address phoneNo Shogo Miyazaki Tokyo 090-xxxx-yyyy Tatsuya Akasaka Osaka 080-aaaa-bbbb Mayuko Kobayashi Osaka 080-aaaa-bbbb Hana Takahashi Nagoya 070-cccc-dddd Tarou Omori Nagoya 070-cccc-dddd ・・・・
このアドレスの、苗字だけほしい場合、こんな感じにawkです。
[root@server tmp]# awk '{print $2}' Address.txt lastName Miyazaki Akasaka Kobayashi Takahashi Omori
へー、2列目だけ取れた。
じゃあ、このアドレス帳のなかで、Address(住所)が「Osaka」の人のlastName(苗字)がほしいとき、こんな感じでawkします。
[root@server tmp]# awk '$3=="Osaka" {print $2}' Address.txt Akasaka Kobayashi
へー、大阪の人だけ取れた。
ちなみに、|をつかってつなげることも出来ます。つなげるイメージはこんな感じ。
[root@server tmp]# cat Address.txt | awk '$3=="Osaka" {print $2}' Akasaka Kobayashi
ちなみに、こうやっても同じ
[root@server tmp]# cat Address.txt | grep Osaka | awk '{print $2}' Akasaka Kobayashi
最初の一人だけほしい場合
[root@server tmp]# cat Address.txt | grep Osaka | head -1 | awk '{print $2}' Akasaka
ずいぶん色々出てきた。
awkは正規表現とかも使えるみたいだけど、今日はもうつかれた。リンクを参照。見れば多分出来ます。
最後の要素だけ取り出したい。 †
頭から順番に値を取り出す方法はわかった。しかし、最後の要素だけ取り出したい場合ってどうすればいいの???
それはこんな感じです。
awk '{print $NF}' test.log
これで、test.logの行の最後の要素だけ取れます。
区切り文字にタブを指定する †
awk -F"\t" ~