【問題と解答】第17回ジュンク堂はシェル芸が乗っ取った勉強会

Thu Jun 18 23:59:56 JST 2015 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 702, keywords: コマンド,CLI,Linux,Unix,勉強会,シェル芸,シェル芸勉強会

  このエントリーをはてなブックマークに追加 

ルール

  • ワンライナーで出されたお題を解きます。
  • 汎用的な解を考えるのは出された問題をとりあえず解いてから。
  • 特にどの環境とは指定しないので各自環境に合わせて読み替えを。ただし今回、AWKだけはGNU Awk 4.0.1を使っていると明記しておきます。
  • 今回のテーマはAWKですが、何で解いても構いません。別にPowerShellだろうがRubyだろうが構いません。ワンライナーじゃないけどエクセル方眼紙でも。

環境

今回はLinuxで解答例を作りましたので、BSDやMacな方は以下の表をご参考に・・・。

Mac,BSD系 Linux
gdate date
gsed sed
tail -r tac
gtr tr
gfold fold

Q1

次のようなデータを

次のように変換してみましょう。

余力のある人は次のようなJSON形式にしてみましょう。

解答

連想配列にデータを追記していって最後に出力するのが楽な方法です。

JSONにするには力技(しか思い浮かばなかった)。

Q2

以下の数字のファイルから同じレコード(行)があるかないかを調べ、ある場合には何行目と何行目にあるのか出力しましょう。

解答

1千万行でも10秒くらいで答えが出ることを確認済みです。もっと大きなレコード数で行う場合はもう一捻り必要です。

Q3

次のJSONのデータについて、aに対応づけられた配列内の数字の合計とbに対応づけられた配列内の数字の合計を求めましょう。

解答

きれいな方法が思い浮かばないので力技で。

Q4

次のようなIPv6アドレスをechoした後にパイプでコマンドをつなぎ、「::」で省略されているセクションに0を補ってください。

ただし、同じワンライナーが

でも使えるようにしてください。

解答

whileを使ってNFが8になるまでフィールドを補ってから処理してやると素直な処理になります。初めてシェル芸勉強会でawkのwhileを使いました・・・。



prev:【問題のみ】第17回ジュンク堂はシェル芸が乗っ取った勉強会 next:SoftwareDesign2015年7月号の一行感想文





このサイトではGoogle AdSenseやその他ソーシャルボタンのためにCookieを使用しています。もし同意いただけない場合はブラウザでクッキーを無効にして閲覧をお願いします。This site uses cookies for Google AdSense and some social buttons. If you cannot accept our use of cookies, please disable cookies on your browser.