第24回シェル芸勉強会に参加してきたので、その復習。
今回はLLOTと同日開催のためか、少し人数が少なめ?だった様子。ベテラン勢が少し少数になってた…のかな?
まぁ、いつも通り復習。模範解答と問題はこちら

Q1.

各行に2種類の文字列(卵、玉子)があるので、それの数を算出する。
awkのみで回答するのがキレイな解き方なんだけど、あんまりawkに自信ないので以前やった行の内容をソートさせる方法にちょい手を加えて回答した。

cat Q1 | while read line; do echo $line | sed 's/ /\n/g' | sort | uniq -c | awk '{line=line " " $0} END {print line}' ; done
[root@BS-PUB-CENT7-01 vol.24]# cat Q1
玉子 卵 玉子 玉子 玉子 玉子
玉子 玉子 卵 卵 卵 玉子
卵 玉子 卵 玉子 玉子 玉子
卵 玉子 卵 卵 卵 卵
玉子 卵 玉子
[root@BS-PUB-CENT7-01 vol.24]# cat Q1 | while read line; do echo $line | sed 's/ /\n/g' | sort | uniq -c | awk '{line=line " " $0} END {print line}' ; done
       5 玉子       1 卵
       3 玉子       3 卵
       4 玉子       2 卵
       1 玉子       5 卵
       2 玉子       1 卵

が、こちらの@ebanさんのツイートのように書くことでawk単体でシンプルに対応することができるようだ。 やはりawk大事。もうちょい勉強しないと…

awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a);print ""}' Q1
[root@BS-PUB-CENT7-01 vol.24]# cat Q1
玉子 卵 玉子 玉子 玉子 玉子
玉子 玉子 卵 卵 卵 玉子
卵 玉子 卵 玉子 玉子 玉子
卵 玉子 卵 卵 卵 卵
玉子 卵 玉子
[root@BS-PUB-CENT7-01 vol.24]# # ※わかりやすくするために、改行処理をちゃんと入れるまではxargsで無理やり改行させてる。
[root@BS-PUB-CENT7-01 vol.24]# 
[root@BS-PUB-CENT7-01 vol.24]# # 連想配列に突っ込んでprintfで変数と連想配列の値をくっつけていく
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k]}' Q1 | xargs
玉子:5 卵:1 玉子:8 卵:4 玉子:12 卵:6 玉子:13 卵:11 玉子:15 卵:12
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 変数がどんどん足されていくので、行の最後に変数の値をクリアする(「delete(a)」のとこ)
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a)}' Q1 | xargs
玉子:5 卵:1 玉子:3 卵:3 玉子:4 卵:2 玉子:1 卵:5 玉子:2 卵:1
[root@BS-PUB-CENT7-01 vol.24]# # 各行で処理が終わったら改行させる(「print ""」のとこ)
[root@BS-PUB-CENT7-01 vol.24]# awk '{for(i=1;i<=NF;i++)a[$i]++;for(k in a)printf "%s ", k":"a[k];delete(a);print ""}' Q1
玉子:5 卵:1
玉子:3 卵:3
玉子:4 卵:2
玉子:1 卵:5
玉子:2 卵:1

Q2.

同じ文字が2つ以上出てきた場合、最初の文字以外は表示させないようにする。 (「あいあうい」なら「あいう」へ、問題の「へのへのもへじ」なら「へのもじ」へ変換する) これは結構簡単な方だったかも。 uniqコマンドを使うとソートさせないといけないので、awkで対応する。

cat Q2 | grep -o . | awk '!a[$0]++' | tr -d '\n' | xargs
[root@BS-PUB-CENT7-01 vol.24]# cat Q2
へのへのもへじ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 「grep -o .」でヒットする文字列(「.」のみで任意のすべての1文字)の場合は改行して出力させる処理を追加
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o .
へ
の
へ
の
も
へ
じ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # awkで2個目以降の文字列はすべて出力させない処理を追加
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o . | awk '!a[$0]++'
へ
の
も
じ
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 改行を削除
[root@BS-PUB-CENT7-01 vol.24]# cat Q2 | grep -o . | awk '!a[$0]++' | tr -d '\n' | xargs
へのもじ

これについても、@ebanさんの回答のように「paste -sd ''」を使うことで、改行を削除して、かつ最後の出力の改行はちゃんと出してくれるようになる。

grep -o . Q2 | awk '!a[$0]++' | paste -sd ''
grep -o . Q2 | awk '!a[$0]++{printf $1}END{print""}' # paste部分もawkだけでやった場合
[root@BS-PUB-CENT7-01 vol.24]# grep -o . Q2 | awk '!a[$0]++' | paste -sd ''
へのもじ
[root@BS-PUB-CENT7-01 vol.24]# grep -o . Q2 | awk '!a[$0]++{printf $1}END{print""}' # paste部分もawkだけでやった場合
へのもじ

Q3.

ファイルをソートして、1列目の内容に応じて「%%」を挿入してグループ分けするよ、という問題。
awkでやると簡単にできるようだけど、いかんせんまだawk力が高くないので、模範解答から。

sort Q3 | awk '{if($1!=a){print "%%";print;a=$1}else{print}}END{print "%%"}'
[root@BS-PUB-CENT7-01 vol.24]# cat Q3
金 日成
キム ワイプ
金 正日
キム タオル
金 正男
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # まずはソート
[root@BS-PUB-CENT7-01 vol.24]# sort Q3
キム タオル
キム ワイプ
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # もし$1の値が直前と違った場合は、「%%」出力後に値をprintする(if($1!=a){print "%%";print;a=$1})
[root@BS-PUB-CENT7-01 vol.24]# # それ以外はそのままprint(else{print})
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '<span style="color: #000000;">{</span>if($1!=a){print "%%";print;a=$1}</span><span style="color: #0000ff;">else{print}}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「%%」を付け足す(END{print "%%"})
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '{if($1!=a){print "%%";print;a=$1}else{print}}END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

そのほか、@ebanさんや@kunst1080さん、あと@mutz0623さんの解答がよかったので分解して理解しとく。

@ebanさん

[root@BS-PUB-CENT7-01 vol.24]# # 変数aが$1でない場合、%%をプリントして変数aに$1を代入する
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1}'
%%
%%
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # もちろん、代入しただけじゃ何も出ないので変数aをプリントさせる
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1};1'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「echo %%」で%%を出力して終わり。(「END{print "%%"}」で もいけるけど、そっちのほうが長くなるようだ)
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'a!=$1{print "%%";a=$1};1';echo %%
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk 'l!=$1{print "%%";l=$1};1;END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

@kunst1080さん

[root@BS-PUB-CENT7-01 vol.24]# # 変数aが前の行と同じでない場合、%%を出力する
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}'
%%
%%
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # そうでない場合、行を出力する処理を追加
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}{print}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に%%を出力
[root@BS-PUB-CENT7-01 vol.24]# sort Q3 | awk '!a[$1]++{print "%%"}{print}END{print "%%"}'
%%
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

@mutz0623さん

[root@BS-PUB-CENT7-01 vol.24]# # グルーピングして、各列の一列名を別途echoする。
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金")
金 日成
キム ワイプ
金 正日
キム タオル
金 正男
キム
金
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # sortする
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort
キム
キム タオル
キム ワイプ
金
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 「キム」「金」のみの行を置換する
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort | sed -r "s/^( キム|金)$/%%/"
キム
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 最後に「%%」を出力
[root@BS-PUB-CENT7-01 vol.24]# (cat Q3 ;echo "キム";echo "金") | sort | sed -r "s/^( キム|金)$/%%/";echo %%
キム
キム タオル
キム ワイプ
%%
金 正男
金 正日
金 日成
%%

Q4.

xlsxファイルの中身を見て、セルA1の値を取得するというもの。
とりあえずxlsx2csvコマンドがあったので、それで取得した。(推奨はxlsxが圧縮されたファイルだから、そこを踏まえての対応を求められている)

[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx
114514,シェル芸バイブ
危険シェル芸,ドラゴン曲線
キュアエンジニア,素数
エクシェル芸,変態シェル芸
[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx | awk -F, 'NR==1{print $1}'
114514
[root@BS-PUB-CENT7-01 vol.24]# xlsx2csv Q4/Q4.xlsx | awk -F, 'NR==1{print $2}'
シェル芸バイブ

Q5.

ファイルに記述されている数式を、値を代入して計算させる問題。 echoで値を渡す場合はxargsをうまく使うといいようだ。bcについては、「-l」オプションを付与して浮動小数点計算をさせないといけないので注意。

sed 's/x/3/g' Q5 | bc -l
[root@BS-PUB-CENT7-01 vol.24]# cat Q5
x + x^2
x + 1/x
x*x*x
[root@BS-PUB-CENT7-01 vol.24]# sed 's/x/3/g' Q5
3 + 3^2
3 + 1/3
3*3*3
[root@BS-PUB-CENT7-01 vol.24]# sed 's/x/3/g' Q5 | bc -l
12
3.33333333333333333333
27

  echoで値を渡す場合は以下。

echo 3 | xargs -I{} sh -c "sed 's/x/{}/g' Q5 | bc -l"
[root@BS-PUB-CENT7-01 vol.24]# echo 3
3
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsを使って、パイプから得た値を元にsedで置換する
[root@BS-PUB-CENT7-01 vol.24]# echo 3 | xargs -I{} sed 's/x/{}/g' Q5
3 + 3^2
3 + 1/3
3*3*3
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsで実行させるコマンドでパイプを利用する場合はshコマンドで"(ダブルクォーテーション)で囲ったコマンドを指定してやればよいので、それでbcを実行させる
[root@BS-PUB-CENT7-01 vol.24]# echo 3 | xargs -I{} sh -c "sed 's/x/{}/g' Q5 | bc -l"
12
3.33333333333333333333
27

Q6.

ファイルの中で一行になってる文字列から、"卵"と"玉子"に分けて数が少ない方を削除して、多いほうに置換する(卵が2、玉子が5なら、変換して玉子が7個並ぶようにすればいい)。
なので、まずは"卵"と"玉子"の数をそれぞれ数えてやるところから始めればいい。

 

grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}' | xargs -I{} sed -r 's/玉子|卵/{}/g' Q6
[root@BS-PUB-CENT7-01 vol.24]# # 卵と玉子を分割する
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6
卵
卵
玉子
玉子
玉子
玉子
玉子
卵
卵
卵
玉子
玉子
卵
玉子
玉子
玉子
玉子
卵
卵
玉子
卵
玉子
卵
卵
玉子
卵
玉子
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # ソートして数をカウントする()
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr
     15 玉子
     12 卵
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 数の多い方だけ取得する
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}'
玉子
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # xargsで、数の多いほうですべて置換をさせる
[root@BS-PUB-CENT7-01 vol.24]# grep -Eo "卵|玉子" Q6 | sort | uniq -c | sort -k1nr | awk 'NR==1{print $2}' | xargs -I{} sed -r 's/玉子|卵/{}/g' Q6
玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉子玉 子玉子玉子玉子
[root@BS-PUB-CENT7-01 vol.24]#

Q7.

5桁の数字を出して、それぞれを構成する数字が同じものを除外する(11122と22111は1が3つ、2が2つなので重複とみなす)。 数字の構成要素をすべて分割して、行レベルでソート、ユニークな行のみを残すことで対応できる。   なお、回答考えてるときに使ってたのが2桁だったのだけど、Twitterに挙げたのだと5桁は処理重すぎて計算できなかった。 残念…

で、じゃあどうすればいいのかというと、模範解答のようにawkのasortを用いる方法があるらしい。
(知らなかった…)

[root@BS-PUB-CENT7-01 vol.24]# # ※長いから頭の10行のみ出力させている
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | head -10
00000
00001
00002
00003
00004
00005
00006
00007
00008
00009
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # まず、行の要素をすべて空白で分割する
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | head -10
0 0 0 0 0
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
0 0 0 0 4
0 0 0 0 5
0 0 0 0 6
0 0 0 0 7
0 0 0 0 8
0 0 0 0 9
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # awkで、すべての行の要素をソートさせる
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]}print ""}' | head -10
00000
01000
02000
03000
04000
05000
06000
07000
08000
09000
[root@BS-PUB-CENT7-01 vol.24]#
[root@BS-PUB-CENT7-01 vol.24]# # 各行をソート・ユニークなもののみを出力させる
[root@BS-PUB-CENT7-01 vol.24]# seq -w 00000 99999 | sed 's/./& /g' | awk '{for(i=1;i<=NF;i++)a[i]=$i;asort(a);for(k in a){printf a[k]}print ""}' | sort -u | head -10
00000
01000
02000
03000
04000
05000
06000
07000
08000
09000

@ebanさんのような解き方もある。
これは、最初から各桁で同じorより小さい値のみを出力させる方法(例えば199は出るけど、911とか191は最初から表示させないようにする)だ。
問題が出てから数分で回答されたのがこれという。すごい…
なお、処理速度も上のものより早かった。

seq -w 0 99999 | awk -F "" '$1<=$2&&$2<=$3&&$3<=$4&&$4<=$5'

Q8.

数学オリンピックの問題をカスタマイズした問題。
最初に、"1~7までの数字をすべて含む7桁の数字"を抽出し、相異なる7以下の正の整数a,b,c,d,e,f,gを用いて「a*b*c*d + e*f*g」という計算を行って求められる素数の数を求める。
地味に最初のとこでちゃんと問題を読解できずに変な方向に突っ走ってしまった…反省

まず、"1~7までの数字をすべて含む7桁の数字"を抽出させる。
これについては、grepやawkでのアンド検索が必要となる。

seq -w 0000000 9999999 | grep 1 | grep 2 | grep 3 | grep 4 | grep 5 | grep 6 | grep 7 # grepでやる場合
seq -w 0000000 9999999 | awk '/1/ && /2/ && /3/ && /4/ && /5/ && /6/ && /7/' # awkでやる場合

次に、相異なる7以下の~の箇所については、以下のように対応した。

cat tmp | sed 's/./& /g' | awk '{print $1*$2*$3*$4"+"$5*$6*$7}' | bc | factor | sed 's/://g' | awk '$1==$2' | wc -l
[root@BS-PUB-CENT7-01 vol.24]# seq -w 0000000 9999999 | awk '/1/ && /2/ && /3/ && /4/ && /5/ && /6/ && /7/' | sed 's/./& /g' | awk '{print $1*$2*$3*$4"+"$5*$6*$7}' | bc | factor | sed 's/://g' | awk '$1==$2' | wc -l
144

Q8、結構難しかった気が…

LTとか

LTでは、uniqコマンドのバージョンの違いによって「--group」オプションの有無が違ってたりとか、薬を作成する実験には大量の実験が必要で大変だという話を聞けた。
知らない内容だったりしたので大変勉強になったのだが、最後に行われた某図書館のオープンデータにいろいろなものがあることを知れたので良かった。

今までに出版された多くの図書データについての情報(出版社や著者など)のほか、国会の議事録なんかもあるらしい。
例えば、以下のコマンドで国会の議事録からヤジの内容を得ることができるようだ。
(「と呼ぶ声あり」は途中までで、途中から「と呼ぶ者あり」になったらしい。どういう違いが…?)

curl -s <span class="pl-s"><span class="pl-pds">"</span>http://kokkai.ndl.go.jp/api/1.0/speech?<span class="pl-s"><span class="pl-pds">$(</span><span class="pl-c1">echo</span> <span class="pl-s"><span class="pl-pds">"</span>maximumRecords=100&any=と呼ぶ声あり<span class="pl-pds">"</span></span> <span class="pl-k">|</span> nkf -MQ <span class="pl-k">|</span> tr -d <span class="pl-s"><span class="pl-pds">'</span>\n<span class="pl-pds">'</span></span> <span class="pl-k">|</span> gsed <span class="pl-s"><span class="pl-pds">'</span>s/=\+/%/g<span class="pl-pds">'</span></span><span class="pl-pds">)</span></span><span class="pl-pds">"</span></span> <span class="pl-k">|</span> grep -o <span class="pl-s"><span class="pl-pds">"</span>「.*」<span class="pl-pds">"</span></span>
[root@BS-PUB-CENT7-01 vol.24]# curl -s "http://kokkai.ndl.go.jp/api/1.0/speech?$(echo "maximumRecords=100&any=と呼ぶ声あり" | nkf -MQ | tr -d '\n' | sed 's/=\+/%/g')" | grep -o "「.*」" | sort | uniq -c
      1 「いるぞ」
      1 「じようだん言うなよ。朝鮮事変以後だよ」
      1 「そんなことないよ」と呼ぶ者あり)そんなことないと言ったって、政策を発表するビラのほう は制限してしまって、政治資金は幾らでも自由に入るということになれば、政策で対決できないというこ とになれば、残るのは、(「政策以外のところに使うんだよ、そこが肝心なところだ」と呼ぶ者あり)そ れは政策以外のところに金を使うことになるんじゃないですか。結局今度の法案は、金のかからないのは 政策発表のビラにはかからないけれども、買収のほうへ金を回すためにこういう法案を出すのだ、そうい うことになるんじゃないですか。そうでないなら、財界から金の入る道を閉ざすような政治資金規正法を きちっと通す、そのことのほうが重要じゃないですか。そうでなければ、三回しかビラが出せない、そう してお互いに各選挙区で政策的な対決のビラを出すことができないということになれば、もう情実か金か 、そういうものしか選挙運動がなくなってしまうじゃないですか。三種類のビラが出た、ビラはもうこれ で終わりだということになってしまう。だからかえって金がかかって、金で対決する選挙になるんじゃな いですか。(「使わなければいいんだよ」と呼ぶ者あり)使わなければいいといったって、使うのだから しようがない。それで、先ほどの愛媛のあの例のように、たとえばシンボル・マークで応募した方には一 万円金をやるとか、お礼を上げますとか、こうやっているじゃないですか。現に皆さんのほうではそうな りませんか。政治資金規正法を出してその根源をとめてしまえば、そのビラにかかる金なんてたいしたこ とはありませんよ。また、それにかかる金なら本来選挙の正しいあり方なんですから……。政策の対決点 を明らかにする、これは参議院の公職選挙特別委員会が京都へ行って調べたら、京都の府民の人たちが言 っていることなんですが、選挙の政策のビラをたくさん出していただいたおかげで対決点がはっきりした 、それから中傷と政策というものの違いもはっきりしたと言っているのですから、こっちへ金のかかるこ とは、これは本来選挙民自身も望んでいることであるし、そうしてそんなに金がかかるはずがない。こっ ちのほうをとめてしまえば、行く道というのは、もう買収か汚職かそっちしかないことになるじゃないで すか。(「公害と同じだよ、発生源と同じだよ」
      1 「だれが」
     17 「異議なし」
      1 「偽りその他不正の行為により酒類の製造免許を受けた場合」
      1 「行政管理庁だ」
      1 「国会はどうだ」
      1 「財政部長じゃない」
      1 「三倍じゃだめだ」

議事録も、これだけ情報がそろってれば遊べるものになるんだなー
やはり、awkをもっと勉強しないといけないと思った勉強会だった。