会場の様子を後ろから写真に撮る、いつになったら実現出来るのかもう分からなくなってきた今日この頃。雨の降りが悪い梅雨の最中、脳みそスパルタ教育にご参加いただきありがたや。シェル芸勉強会へ遠隔参加する福岡サテライト会場も、今回で7回目を数えることになった。参加者の方々と会場のご提供いただいているベータソフト様と管理担当者、そしてもちろんUSP友の会運営陣と問題作成会長のおかげである。今回は午前中が別件の用事があったため、午後の部から参加することになった。参加者はのべ9人だった。(途中出入有)初めての参加者は1名。福岡のペースで考え方や解説、余談を重視して進めるスタイルで。イベント案内ページ本家東京会場usptomo.doorkeeper.jp大阪サテライト会場5f01b3bc1d81c1fae2378cdc89.doorkeeper.jp福岡サテライト会場atnd.orgTwitterおまとめ上田会長によるTogetterおまとめ。福岡サテライト会場にも少しずつ顔なじみな方が増えてきた。6月号のbash特集記事と、シェルスクリプトマガジンvol.38を宣伝しておいた。勉強会ライブ配信前のイントロで話したスライドはこちら。いっても時間が足りず7ページまでしか話せていないが。speakerdeck.com開始そしていよいよライブ配信開始。オープンデータについては・・・残念ながらPDFとか画像とかXLSですよねー。久留米市で人口データが公開されているが、HTMLのテーブルになっている分については、シェルスクリプトでスクレイピングしてCSVにする処理を以前ブログに書いたのでここで紹介しておく。papiro.hatenablog.jp今回の問題は変態チックな問題ではなく、比較的正統派な問題が多かった。手練れが少ない福岡サテライト会場にはちょうどいい感じだったかもしれない。問題と解答のページは、上田さんブログの記事を参照してもらいたい。上田ブログではここから福岡サテライト会場で解説した内容を。完全に解けることよりも考え方や余談を重視するスタイル。解答例はMacで作成。GNU版のコマンドはguniqなど頭にgが付くコマンドになっている場合がある。Q1年月をキーにしてデータを縦に並べる処理。会長の解答のように分割して処理した方が分かりやすいかもしれない。福岡ではawkに慣れていない人も多いので、-Fオプション、三項演算子、sprintf、iと$iの違いなどについて解説した。monthly_typhoon勉強会の時には話さなかったが、MacやFreeBSDなどのBSD系OSに付属のodコマンドだと、マルチバイトなテキストデータのダンプに対応しているので、BOM付きデータの確認とかが分かりやすいかも!?下記のコマンドで、最初の3バイトが通常のテキストデータではないことがわかる。**Q2年毎台風上陸数の基本的な集計。突っ込んだ解答は会長の解答を参照。福岡サテライトでは、基本的な集計方法について解説した。ポイントは6桁の年月から月を削って4桁の年にし、年をキーにして合計すれば良い。具体的な処理方法としては、awkのsubstr()関数と連想配列使うか?Tukubaiのselfとsm2を使うか?どちらも常套句に近いので体で慣れていこう。2上田会長の解答を参考に、後で作った解答がこちら。実行結果何も出力されないので整合性が取れている。$2!=$4'Q3各月で台風が上陸する確率。これは勘違いをしていた。(上陸した台風の数を合計した数を月の数で割っていた。台風の数ではなく台風が上陸した月の数を数えなくてはいけない。)帰宅後、下記の解答を考えたので載せておく。年月の月だけを切り出す。上陸数については1以上は全て1に変換。1....次に並べ替えてTukubaiのcountで各行の行数を集計する。2カラム目が0の行が上陸しなかった場合で、1が上陸した場合になる。3カラム目がそれぞれの回数になる。39....これをTukubaiのmapコマンドで2次元展開する。1カラム目が月、2カラム目が上陸しなかった数、3カラム目が上陸した数になる。1行めのヘッダは今後不要。0あとはsedで1行目のヘッダを消し、awkで確率を計算すれば良い。0Q4各年で台風が最初に上陸した月を抽出して、月毎に回数をカウントする。会長の解答とほぼ同じだ。GNU版のuniqを使った場合(Macではguniq)と、Tukubaiコマンドのgetfirstを使った場合で比較してみよう。10Q5台風が上陸しなかった年を抽出。Tukubai使ってるだけで、これも会長とほぼ同じ解答。$1}'1984198620002008しかし福岡サテライトで天才的な解答が。2016あああ元のCSVファイルでコンマ,が13個連続して並んでれば、台風上陸してないよね確かに!Q6これは敢えて簡単な問題にしたということで、解答は会長のページを参考にされたし。Q7これもほぼ会長と同じ解答。福岡ではjoinではなくpasteコマンドで横に並べてから処理する方法を話したが、あくまでもこれは全ての地区でひったくりが起きているという前提じゃないとダメ!。普通はちゃんとjoinしようと注意喚起しておいた。-dがピコーン!と閃くようになりたい。すれば上田会長の解答に。-cでカウントしてawkで処理した。-uについても補足で説明をしておいた。-nrなど集計操作常套句についても改めておさらいをした。Q9会長の解答はawkで未遂と未遂+既遂の2つの連想配列を使うことで処理している。福岡では手段毎にデータをどうやって横に並べるかを解説した。あとはawkで計算するだけなので。xargsを使った例はイカサマ臭い。未遂データを横に並べるのに、awkの連想配列を使った場合と、Tukubaiのyarrコマンドを使った場合で比較してみよう。終了後はbashのプロセス置換についても使い方を解説したりしたあと、TLネタを話した。BSD版dateコマンドとBSD環境でビルドされたmawkの致命的バグ!?案件。speakerdeck.comあとlessの話題も上がったので、下記のブログの紹介もした。「巨大なファイルをviで開いて死亡する」という事例は皆さん結構体験されているようで・・・-Sや-Xや-Nオプションは要チェックかと。papiro.hatenablog.jpということで今回も無事終了した。情報処理の基本とも言うべきシェルワンライナーの勉強会。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。