LoginSignup
3
2

More than 5 years have passed since last update.

【小技】awkコマンドの -vオプションでコマンド実行前に変数を定義する。

Last updated at Posted at 2018-11-23

awkコマンドの小技

非同期化やメトリクス監視が進む昨今、15年前くらいのスクリプトを読んで、部活の朝練のごとくコード化を毎朝の日課にしている、パシリみたいな新卒のエンジニアもいると思います。僕です。さて今日は、2000年代に書かれたスクリプトを読んでいて勉強になったことを書きます。

awkコマンドの-vオプション

今回ご紹介したいのは、awkコマンドの -vオプション です。
この -vオプション を使えば、変数で取得してきた値の、名前を変えて再利用したりできます。
昔の、メール発砲、監視マネージャのコンソール表示のbodyなんかに使われていました。

まずは試運転

awkコマンドの-vオプションの使い方は見ればわかる感じのあれのあれなので、とりあえず試運転したものをペタりします。

[root@ef16029eef68 test]# test1=10
[root@ef16029eef68 test]# test2=20
[root@ef16029eef68 test]#
[root@ef16029eef68 test]# result=`echo|/bin/awk -v used=$test1 -v max=$test2 '{print int((used / max) * 100)}'`
[root@ef16029eef68 test]#
[root@ef16029eef68 test]# echo $result
50

test1に代入した値 10と、test2に代入した値20ですが、
Awkコマンドの -vオプション でいい感じに変換されましたね。
test1は、 used
test2は、 max
にそれぞれ代入できちゃいました。
そしてもう一つ注目して頂きたいのがこちらです。

'{print int((used / max) * 100)}'`

そうなんです。awkで持ってきているため、intで型変換ができちゃうのです。
再計算もここでできてしまうのですね〜。

さらに

ここにはまだ続きがありまして、なんとawkは、変数の展開タイミングも選べるのです。
それが BEGIN 〜 ENDブロック を使った書き方です。

BEGIN ~ ENDの文法

# awk 'BEGIN { 最初の行を読み込む前の処理 } { なにかしらの処理 } END { 最後の行を読み込んだ後の処理 }'
※ENDは書かなくてもいいです。

これ知らなかったなぁ~。

別ファイルからもいける

最後に、AWKの -vオプション と、BEGIN 〜 ENDブロックを使った書き方で、スクリプトを作ったので、ぺたりして終わります。

今回は、5時に夢中!の月曜〜金曜のメンバーを一覧でチョロと出すスクリプトを作成しました!!
5時に夢中!のProgram information APIとかあれば、ソフトでも書けるようになると思いますが、残念ながら今はハードで記述します。

いざモックさてモックやれモック

[root@f8a03c52ae61 work]# cat test.sh 
cat ./in.txt | awk -v mc="メインMC" -v ac="番組アシスタント" -v com="コメンテーター"  '
        BEGIN { FS=" "; }
        {
                print mc ,$1 ,ac ,$2 ,com ,$3 $4
        }
END{ end }'
[root@f8a03c52ae61 work]# 
[root@f8a03c52ae61 work]# 
[root@f8a03c52ae61 work]# cat in.txt 
ふかわりょう 上田まりえさん 若林史江さん マツコさん 
ふかわりょう 上田まりえさん 岩下尚史さん コーヘン会
ふかわりょう 上田まりえさん おおたわ史絵さん 江原啓之さん
ふかわりょう 上田まりえさん 中瀬ゆかりさん 岩井志麻子先生
原田龍二   ミッツさん   中尾ミエさん 堀江さん

test.shが実行ファイル
In.txtが番組情報ファイルです。

さて戻りはいかがかな〜。

[root@f8a03c52ae61 work]# bash test.sh 
メインMC ふかわりょう 番組アシスタント 上田まりえさん コメンテーター 若林史江さんマツコさん
メインMC ふかわりょう 番組アシスタント 上田まりえさん コメンテーター 岩下尚史さんコーヘン会
メインMC ふかわりょう 番組アシスタント 上田まりえさん コメンテーター おおたわ史絵さん江原啓之さん
メインMC ふかわりょう 番組アシスタント 上田まりえさん コメンテーター 中瀬ゆかりさん岩井志麻子先生
メインMC 原田龍二   番組アシスタント ミッツさん   コメンテーター 中尾ミエさん堀江さん

ふむいい感じですね。

詳しく知りたければman  

演算処理、設計哲学、僕はそのすべてを、manコマンドから学んだ。

[root@localhost sandbox]# man awk
       -v var=val
       --assign var=val
              Assign the value val to the variable var, before execution of the program begins.  Such variable values are available to the BEGIN block of an AWK program.

参考

若林史江さんオフィシャルWeb
http://www.fumie-w.com/
https化してない!!僕にやらせて下さい!!

5時に夢中!|バラエティ|TOKYO MX
https://s.mxtv.jp/goji/

[初心者向け]Awkの使い方
https://qiita.com/tofu511/items/3ecf9c5361d08b5c6eae#beginend
この方のQiitaがありがたかった。

awkを実行する
http://www.kt.rim.or.jp/~kbk/gawk-30/gawk_15.html#SEC136

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2