トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

awkについて のバックアップ(No.2)


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の行の最後の要素だけ取れます。