Tukubaiバレンタインデーを明日に控え、皆様いかがお過ごしだろうか?そんな中あいにくの雨天にも関わらず、参加いただきありがたや。素晴らしい会場のご提供にも感謝。会場の案内など第21回シェル芸勉強会の福岡サテライト会場を開設させていただいた。イベント案内はこちら。福岡サテライトも今回で5回目の開催になった。福岡サテライト会場案内atnd.org大阪サテライト会場の案内5f01b3bc1d81c1fae2378cdc89.doorkeeper.jpちなみに大阪は今回も寺シェル芸で徳をつまれたようだ。2016東京本家勉強会の案内usptomo.doorkeeper.jpTogetterまとめ勉強会当日のTwitterまとめはこちら。ハッシュタグは#シェル芸。togetter.com勉強会レポートkunst1080.hatenablog.com午前の部について・・・前置きが長くなってしまった。午前中の部は自宅から遠隔参加した。午前の部は正規表現の濃いお話と、シェルがコマンドを実行するまでに何が起きているか?という内容だった。どちらもかなり興味深い内容だった。bsdhackwww.slideshare.net勉強会本番さて、ようやく午後からの勉強会本番。今回は新しく学生さんがいらっしゃったり、また遠くは大分県日田から来られた方もいらっしゃったりで、ありがたや。IT専門家というよりユーザ企業さんの情報部門な方もいらっしゃった。参加者は全員で8人だった。やっつけなイントロスライドのお話を少々。その後勉強会のライブストリームに突入した。Tashirowww.slideshare.netさて今回の問題は「シェルプログラミング実用テクニック」の本を読んでいれば解けるはず!という会長からのお達しだが・・・解けなかったらゴメンナサイゴメンナサイ。上田ブログさて、私なりの回答例などをば。Macを使っての回答。Q1pdfファイルからテキストを抜き出す。22:30:32]あら、テキストファイルが出来ていた。エラー出力を抑制するには-qオプションを使い、標準出力に出すにはファイル名に-を使えばいいらしい。22:30:32]あとlessで見るといいという話もあったが、lessopenの設定とかが必要かも?時間がなかったので詳しく調べられていない。JIS(cp932)の固定長データの処理の問題。データをざっと見て、35バイト毎に区切れば良さそうかな?と思ったが、下記のようにすると端末上ではへんてこりんな表示になってしまった。表示が乱れているだけだったようで、そのままnkfに通してしまえばよかったようだ。-wx00000001ハナモゲギンコウ*******214413051100000002ハードバンク*********114413018800000003コドモギンコウ********210413093100000004ハタンギンコウ*********234413000800000005アンダーグラウンドギンコウ331413090000000006バミューダメンゼイギンコウ1234130981追記データの中身を確認する方法。odコマンドとiconvを使えばこんな感じで確認可能。nkfだと一部の表示がうまくいかなかった。ShiftJISの半角カナが濁点も1バイトだったりするのがわかりやすいかも。0000326Q3ようやく普通な?問題。今回福岡サテライト会場に参加された方は、この問題だけでも理解していただければ幸いある。やり方はあるが、会場で考えたのはこんなやり方。seqとsedでやっつけな日付っぽいリストを作成。やっつけ処理なので不正な日付も含まれるのに注意。dateコマンドに渡す。dateだと-を指定すれば標準入力から読み込める(フィルタモード)。不正な日付についてはエラーメッセージが出るので、エラー出力をリダイレクトで捨てる。土あとはgrepで日曜日だけを抜き出せばよい。追記MacやFreeBSDなどのBSD系OSに標準付属のdateコマンドだと、標準入力から日付リストを受けることが出来ない(フィルタモードが無い)。そこで、dateコマンドを下記のようにオプションを使うと、2016年1月1日から-vオプションで指定した日数後の日を表示出来る。dateコマンドの上記の使い方をふまえて、下記のような回答が考えられる。MacやFreeBSDな方は、実際に実行して確認してほしい。このやり方は、dateコマンドが366回実行されるので遅いことに注意。'日$'Q4ユニケージのデータ更新処理につながる問題。Tukubaiコマンドを解禁させてもらう。sortコマンドの使い方が重要なので、解説を行いながら解いた。正統派?catとsortで2つのファイルをまとめて並べ替え。sortコマンドの-sオプションで指定以外の列は並べ替えしないようにし、-k1,1オプションで1列目をキーに並べ替える。純愛ババア学園あとはTukubaiのgetlastコマンドを使って、1列目をキーにして最後の列のみを取り出す。変則?こちらはちょっと変則的なやり方。Tukubaiのloopjコマンドで横に連結する。連結する際、データが無い部分は-dオプションでスペースを入れてしまうのがミソ。純愛ババア学園あとはselfコマンドで1列目と最後の列を取り出す。純愛ババア学園Q5テキストファイルの中に変なデータが混じっていることの確認方法。今回はodコマンドの使い方を解説した。x1cオプションを使って表示するやり方。1オクテット毎に16進数とキャラクタ表示をしてくれる。このやり方だとバイトオーダーの影響も受けないので便利。0000032これでefbbbfというのがファイルの最初に混じってるのがわかる。これは要するに「BOM付きUTF-8」ということだった。9cとなっていて、何だか妙チクリンだということがわかる。余談だが、MacやFreeBSDに付属するodコマンドは、マルチバイトの処理に対応している。こんな感じでわかりやすく表示してくれて便利。残念ながらGNU版のodコマンドはマルチバイト処理に対応してないようだ。0000026Q6まずは問題の意味を理解するのに苦労した。要するに下記のようなテキスト処理をしろということだった。a+h{5}(ho){10}[0-9]+↑からこうじゃ↓aa*hhhhhhohohohohohohohohoho[0-9][0-9]*・・・解けなかった。's/\[0-9\]\+/[0-9][0-9]*/'aa*h{5}(ho){10}[0-9][0-9]*Q7段落毎の文字数を数える。段落毎ってのをどうするか?よくやるのは一度全部連結して都合のいい場所で改行してしまうやり方。2つ目のsedコマンドは空行を削除している。'/^$/d'恥の多い生涯を送って来ました。自分には、人間の生活というものが、見当つかないのです。自分は東北の田舎に生れましたので、汽車をはじめて見たのは、よほど大きくなってからでした。自分は停車場のブリッジを、上って、降りて、そうしてそれが線路をまたぎ越えるために造られたものだという事には全然気づかず、ただそれは停車場の構内を外国の遊戯場みたいに、複雑に楽しく、ハイカラにするためにのみ、設備せられてあるものだとばかり思っていました。永い間そう思っていたのです。ブリッジの上ったり降りたりは、自分にはむしろ、ずいぶん垢抜けのした遊戯で、それは鉄道のサーヴィスの中でも、最も気のきいたサーヴィスの一つだと思っていたのですが、のちにそれはただ旅客が線路をまたぎ越えるための頗る実利的な階段に過ぎないのを発見して、にわかに興が覚めました。自分は子供の頃、絵本で地下鉄道というものを見て、これもやはり、実利的な必要から案出せられたものではなく、地上の車に乗るよりは、地下の車に乗ったほうが風がわりで面白い遊びだから、とばかり思っていました。あとは各行の文字数を数える。やって数えるかだが、今回はwhileループからwcコマンドに渡して数えた。wcコマンドの-mオプションは、マルチバイト処理でも文字数を数えてくれる。これは最後の改行までカウントしてしまってるのがダメなところだ。104Q8最後は要するに、マルチーパートなメールデータが読めるか?という問題。データについて解説を行った。回答は会長とほぼ同じなので省略。f_h8cn6ir71....H9a0pdUmvWljZ4ysQWFGaBeCFCtj054/DtXPLC3d47kwk56y2If7KW50y8YNBJLBJG1usb53f7JBxk9On61jS6VNFJqFxdoIZYbWK6QALsnJbBjHYcc4GT2IHJrGhUevkZ1MNypPuf/Z--047d7b621ee6cf83c604cc276bb3--【境界文字列の前後に--が付くと終了】ということで今回も大変お疲れでござった。梅雨なのにあんまり雨が降らずこれはアカンと思う今日この頃。起きるとそこは雪国だった。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。