2014年12月20日土曜日

sedとawkで一行シェルプログラミング

今回の記事は、弊社バルテックのアドベントカレンダーにエントリーしています。
http://www.adventar.org/calendars/414

今回のエントリでは趣向を変えてプログラミングの話をしてみようと思います。
忘年会帰りのsakitaです。

プログラムと言いましても、javaのような高級な言語は使えませんので、主に運用などで使われるシェルプログラムで良く使われるsedやawkを紹介したいと思います。

まずはsed。これは主に文字列変換で使います。

sed -e "s/脂肪/エネルギー/g"

という指定をすると、文字列中の「脂肪」という文言が「エネルギー」という文言に変わります。
ファイルの中身を返還するような場合は、

cat fatboy.txt | sed  -e "s/脂肪/エネルギー/g" > smartboy.txt

とすると、fatboy.txtにある脂肪という文言をエネルギーに変えたテキストがsmartboy.txtに出力されます。

他にも行削除など用途があります。


次にawkです。これ結構いろいろつかえて便利です。
たとえば、こんなファイル。

1      9     18     1
2      9     19     1
....

いわゆる勤怠ファイルです。2列目が出勤時間で3列目が退勤時間で4列目が休憩時間です。
退勤時間だけ出力したい場合、

kintai.txt | awk '{print $3}'

こんなかんじで指定ができます。
計算もできちゃったりします。

たとえば、勤務時間を計算する場合、

kintai,.txt | awk '{print $1 $3-$2-$4}'

こんな感じでうまくいきます。

いろいろ便利そうなのですが、なかなかとっつきづらいかもしれません。
こういうときどうするの? といった疑問があったとき、私が良く見るサイトはこちら。
https://www.usptomo.com/
USP友の会の勉強会スライド。
表計算をしたりソートしたりなどなど、自由自在に1行プログラムで文字列操作をしています。

私もさらに勉強をしてawk使い見習いくらいになりたいものです。

0 件のコメント:

コメントを投稿