[シェル芸]2014/04/05 第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会に行ってきたよのお話


久しぶりの勉強会ネタです。ここ最近いろんなつらみが重なって参加できてませんでしたが、「第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会」にUSP友の会スタッフとして参加してきました。しかも今回は日本UNIXユーザ会の後援つきでございます。いつもはKDDI ウェブコミュニケーションズ様に会場提供いただいていましたが、今回はGMOインターネット様のご好意により、勝手にセルリアンタワーをシェルリアンタワー呼ばわりしての開催です。ありがとうございま.sh。

今回、上田さん曰く「いつもより簡単です」とのことでしたが、やっぱり参加者を殺しにかかってきています。(;´д`) 問題と回答はこちらになります。

全8問のシェル芸問題を解いています。皆さん真剣です。

20140405_ShellGei10-001

シンガーソングライターみたいですが講師の上田先生です。

20140405_ShellGei10-002

GMOインターネット様による、VPS「ConoHa」宣伝タイムです。3000円分のクーポンもいただいたので、いろいろ遊んでみようと思います。なお、このプレゼンはパワポではなくlessで実演しています!

20140405_ShellGei10-003

6問目、hogeと書かれたファイルとhugeと書かれたファイルをそれぞれ別のディレクトリに振り分けるというエクストリームなシェル芸です。

20140405_ShellGei10-004

みんな大好きxargs。

20140405_ShellGei10-005

grep -o で縦に!

20140405_ShellGei10-006

ConoHaたんマジConoHa!

20140405_ShellGei10-007

当日の様子はこちらで振り返ることができます。

第10回記念シェル芸勉強会@シェルリアンタワー&第28回場所が未定だったが決まったぞ定例会 - Togetterまとめ

Ustream.tv (1)

Ustream.tv (2)

今回、2つ目から鱗だったのは「grep -o」の存在と、awkの「 awk '$1 != $2'」でした。(後者のawkは、USPマガジン Vol.12でさいとうさんが触れています)

grep -o の使いドコロはこんな感じですね。

もう少し詳しくフォローしますと、grepのhelpでは「-o, --only-matching       show only the part of a line matching PATTERN」と出てきます。つまり、パターンにマッチした箇所だけ出力してくれます。上田さんのブログにもサンプルがありますので見てみるとよいですよ。つまり

[hamada@localhost ~]$ echo hoge | grep -o .
h
o
g
e

こうなります。Q2のように「スペースと数字と改行を使って次のようなファイルを作り、書いた数を足し算してください」と言われても・・・

$ cat nums 
        1

2 3          
         4            5
        6    7

8      9

一旦 grep -o を使って整形してやればできました。 grep -o マジ grep -o !

[hamada@localhost ~]$ expr $(cat nums | grep -o . | xargs | sed -e 's/ / + /g')
45

awk '$1 != $2' が生きたのはQ7でした。「file1 file2」の行と「file2 file1」の行は重複とみなすという、そら恐ろしい条件で涙目になりましたが、さいとうさんのヒントでこんな解き方でできました。

[hamada@localhost ~]$ for i in $(seq 1 9); do for j in $(seq $i 9); do echo file$i file$j; done; done | awk '$1 != $2'

まだまだsh行が足りないですが、この2つを覚えただけでもかなり捗りそうです。次回、6月に大阪で、8月はOSCでシェル芸勉強会を開催する予定なので、みんなも来るといいよ!

最後におまけ。

 

[amazonjs asin="4904807065" locale="JP" title="USP MAGAZINE vol.12"]