文化の日っ!そんな日はシェル芸で頭脳をぶっ叩くのが良くないかい?世間一般は文化的祝日だが、そんな中福岡サテライト会場に3人が集まった。遠くは長崎から!福岡サテライト開催も19回目となった。勉強会募集サイトシェル芸界隈で合成文字が流行。午前中は鳥海さんによる文字コードのお話を聴く。ご静聴ありがとうございました。2018年11月3日twitter.comEUCやShift-JISの成り立ちが面白かった。Shift-JISのトリッキーなコードに闇を感じる。ワンライナーで文字コード表やネストした三項演算子が繰り出される時間。ダメ文字問題なんてあったのか!?次回はようやくUnicodeの世界へ突入らしい。-uオプションで大文字出力が出来るのがあまり知られてないようだ。xxdのオプションについては、マニュアルで一度確認してみよう。読み出しのオフセットや長さ指定、出力の列数、エンディアンの切り替えなどの指定が出来る。参加者みんなで会場近くのパレスチナ料理屋「D-TRANOI」という店へ入ってみた。tenjinsite.jp香辛料がすごく効いたサッパリした辛さ。食べるうちに口がヒリヒリしてきて、かなーり辛いが美味い。戻ってからしばらくしてイントロを話す。バッチファイルやってみた的な。speakerdeck.com午後の部さていよいよ問題にトライの時間。問題と解答例はこちら。上田ブログ今回は福岡サテライトでも問題をじっくり解いていくことにした。サポートや解説はいつもより控えめでも大丈夫だった気がする。参加者もレベルアップしてきたようで何よりだ。解答例は会長の例を参照してもらうとして、モヤモヤ文字がどうなっているかを確認してみるマルチバイトに対応しているMacやFreeBSD付属のodコマンドで確認出来るぞ。16進数のコードでd288やd289になっている部分がモヤモヤだ。0000114Q2ファイルの中に記載された文字だけを抽出する問題。私の解答はuniqの-dオプションで重複チェックを利用したもの。会長の解答はgrepの-fオプションを使っていた。grepの-fオプションについては改めて解説をして補足した。Q3スクレイピングで元号リストを取得する必要がある問題。w3mを使って楽をした。参加者の中から「grepの-fオプションを使うといいんじゃ?」という意見が。おおなるほろ!ということで下記のようなスッキリとした解答が出せた。grepの-fオプションを使わない場合は、会長の例のようにちと苦労が必要。uniqの-fオプションで重複チェックに使わない列の指定はよく忘れる。Q4bashのブレース展開の問題だった。解答例は会長のを参照で。{A..Z}{A..Z}{A..Z}と3つのブレース展開を使えば良かった。ヒストグラムを描く問題は「シェルスクリプト高速開発入門」にあったのを思い出す。上田会長の例を参照のこと。上記著書によると、0から1の範囲の一様乱数を12個ずつ足して6引くと、標準偏差1のガウス分布に近いな乱数が出せるようだ。関連する内容のブログを以前に書いていたので、手前味噌ながら載せておく。papiro.hatenablog.jpQ6これは文字を一つずつズラしながら表示する処理が必要な問題。ファイルの中身から4文字を1文字ズラしながら出力する処理を考えてみる。解答のようにawkのsubstr()関数を使うのが自然か。別の考え方としてフィールド区切り文字を変更するやり方を考えてみる。第一フィールド($1)が一文字目、第二フィールド($2)が二文字目として扱える。要するに1文字ずつフィールド分割して処理が可能。フィールド区切り文字の指定方法には、下記の2通りがある。awkの-Fオプションを使う。形式を指定すると、変数への代入と解釈される。awkのフィールド区切り文字は特殊変数FSで指定可能。両方のファイルに含まれるものを選び出せば良い。解答例は会長のものを参照。uniqの-fオプションを活用しているのがポイント。1で割り切れる正の整数の組合せa,bの生成。1から1000までの整数を使った解答例がこちら。乱数の発生はawkのsrand()関数とrand()関数を利用。1で割った剰余がゼロの時のみ出力するパターンを使えば良い。216更に(a2+b2)/(ab+1)の計算も出力して確認する。ポイントは2つ目のawkでfflush()関数を使っている事。fflush()関数を使わない場合、バッファリングされてなかなか出力されない。上田会長の解答例を参照のこと。出力結果を更にパイプで他のコマンドに渡す際、出力の量が少ないとバッファリングでなかなか出力されない現象が起きるので注意しよう。下記のコマンドを使う際、バッファリングさせない時に使う関数やオプションをまとめておく。オプションQ8前のデータの結果から次を出力し続ける計算。詳しくは上田会長の解答例を参照。この問題はawkの出力時に小数点以下の桁を減らさないのがポイントだった。sprintf()関数を使う方法もあるが、awkには数値出力時のフォーマットを指定するOFMTという特殊変数がある。例としてこれを参考にしてみた。2018年11月3日twitter.comこんな感じで100万行出力し、重複した数値が無いかを確認する。連続で重複しない数値をたくさん出すbcで計算する方法もあった。勉強会で出てきた事例に関連のあるブログ記事を書いてたのを思い出した。休息の後、手前味噌ながら自作記事を紹介しながら内容の解説をした。papiro.hatenablog.jppapiro.hatenablog.jp全体を通して前回に続いて、今回も長崎から手練れのシェル芸人の方が遠路はるばる参加された。参加者の方がレベルアップされてきたのも嬉しい。grepの-fオプションについて解説したところ、次の問題で活用出来る!と教えていただけたり。参加者の増減はあるが、地味ながらそれなりに効果は出てきたかな?と手応えを感じた回だった。世間はゴールデンウィークですがいかがお過ごしだろうか?そん...2016-03-02オプションの扱い混乱ネタ先日Twitterで--という引数ってなんだろうという話題が上がって...2015-10-23【続】拡張FizzBuzz問題をシェルプログラミングで先日拡張FizzBuzz問題をシェルプログラミングで解いた。はてなブログPro情報処理ってもっとシンプルにならないだろうか?PKI関連、RubyやPHP等のLL、シェルスクリプト、シェル芸、ユニケージ見習い未満。シェルスクリプトとシェル芸はきっと違うんですよ。JPはてなブログをはじめよう!papiroさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。