SlideShare a Scribd company logo
第6回チャンピオンシップ	
  
シェル芸ランナー勉強会	
  
in	
  LLまつり	
USP友の会/産業技術大学院大学	
  
上田隆一
こんにちは	
•  本セッションは、	
  
アバンギャルドな Lightweight	
  Language	
  
「シェル(スクリプト)」	
  
のチュートリアルです。	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 2
あのWikipediaも言っている	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 3
本日はシェル芸勉強会をやります	
•  シェル芸とは?	
  
– マウスも使わず、ソースコードも残さず、	
  
GUIツールを立ち上げる間もなく、	
  
あらゆる調査・計算・テキスト処理を	
  
コマンド入力一撃で終わらす。	
  
– 格闘技で言えばコンバットサンボ	
  
•  理屈ばかり言っていると	
  
この人(右図)に殺されると思え	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 4	
h=p://www.kremlin.ru
これまでのシェル芸勉強会	
•  2012年10月(45人)	
  
–  hbstudy#38	
  シェルスクリプト(Open	
  usp	
  Tukubai)で	
  
いろいろやってみよう!	
  
•  2012年12月(25人)	
  
–  USP友の会会長presents第2回チキチキ!シェル芸人養成勉強会	
  
•  2013年2月(32人)	
  
–  第3回シェル芸爆破デスマッチ勉強会	
  
•  2013年4月(53人)	
  
–  第4回春爛漫シェル芸人撩乱勉強会	
  
•  2013年6月(35人)	
  
–  第5回シェル芸勉強会(プレーンタイプ)	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 5	
延べ(?)190人	
  
のシェル芸人を	
  
荒野に放つ!!
こういう問題を解いてます	
•  Q.	
  0〜9までの数字で欠けているものは?	
  
	
  
4	
  3	
  5	
  9	
  8	
  2	
  
•  A.	
  $	
  echo	
  4	
  3	
  5	
  9	
  8	
  2	
  |	
  tr	
  '	
  '	
  'n'	
  |	
  
cat	
  -­‐	
  <(seq	
  0	
  9)	
  |	
  sort	
  |	
  uniq	
  -­‐u	
  |	
  tr	
  'n'	
  '	
  '	
  
	
  
0	
  1	
  6	
  7	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 6
シェル芸勉強会の意義	
•  普段の仕事にCUIを役立てるためのスキル	
  
を身につけることが趣旨	
  
– ユーザとしてどうコンピュータを使い倒すか?	
  
•  料理人はひたすら包丁や鍋の評論をするか?	
  
– 料理の方が大事	
  
– 使いこなすことの方が大事	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 7
使うもの	
•  自分が普段使っているマシーン	
  
•  自分が普段使っているワンライナー環境	
  
– 他流試合大歓迎	
  
•  PerlでもRubyでもPowerShellでもOK	
  
•  解答はMacとbashで作成しました	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 8
その前に一つ宣伝	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 9	
h=p://ja.wikipedia.org/wiki/たらい舟
では始めます	
•  諸注意	
  
–  全7問	
  
–  コマンドがなかったらその場でインストール願います	
  
–  今回はLLまつりということで、かなり難易度高め	
  
•  あまり実用的でない	
  
–  どんどんツッコンでください(悪意がなければ)	
  
•  ・・・では参りましょう。	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 10
第1問 文字の選別	
•  次の文字列について、濁点の文字、半濁点
の文字、その他の文字(記号含む)の数を数
えてください	
  
「どんどこどん、ぱらぱっぱ、ぴろぴろぴー、	
  
すっとこどっこい。」	
  
(注意:特に意味はない。)	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 11
解答	
•  半角に直して濁点・半濁点を分離	
  →	
  集計	
  
– $	
  echo	
  どんどこどん、ぱらぱっぱ、ぴろぴろぴー、
すっとこどっこい。|	
  gsed	
  's/./n&/g'	
  |	
  nkf	
  -­‐h2	
  |	
  nkf	
  
-­‐Z4	
  |	
  sed	
  's/./&	
  /'	
  |	
  awk	
  'NF==2{print	
  $2}
NF==1{print	
  "_"}'	
  |	
  sort	
  |	
  uniq	
  -­‐c	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 12
第2問 横にcatする	
•  二つのファイルを横にくっつけてください	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 13
解答	
•  $	
  awk	
  '{print	
  FNR,$0}'	
  fileA	
  fileB	
  |	
  sort	
  -­‐s	
  -­‐k1,1	
  |	
  
awk	
  'NR%2==0{print	
  $2}NR%2==1{prinn	
  $2}'	
  
•  Open	
  usp	
  Tukubaiを使う	
  
–  $	
  ycat	
  file{A,B}	
  |	
  tr	
  -­‐d	
  '	
  '	
  	
  
•  会場から	
  
– $	
  paste	
  file{A,B}	
  |	
  tr	
  -­‐d	
  't'	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 14
第3問 小町算	
•  次のechoから始めて	
  
4つの数字の間に	
  +	
  -­‐	
  *	
  /	
  の符号を入れ、	
  
100になる計算式を	
  
ワンライナーで一つ作ってください	
  
•  $	
  echo	
  56	
  2	
  8	
  9	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 15
解答	
•  ランダムに数式を作って100になったら止める	
  
–  $	
  echo	
  56	
  2	
  8	
  9	
  |	
  awk	
  '{while(1){print	
  "/	
  +	
  -­‐	
  *",
$0,int(rand()*4)+1,int(rand()*4)+1,int(rand()*4)+1}}'	
  |	
  awk	
  
'{print	
  $5	
  $($9)	
  $6	
  $($10)	
  $7	
  $($11)	
  $8}'	
  |	
  perl	
  -­‐anle	
  'print	
  
$F[0],"	
  ",eval($F[0])'	
  |	
  grep	
  "	
  100$"	
  |	
  head	
  -­‐n	
  1	
  
•  律儀に式を作る	
  
–  $	
  echo	
  56	
  2	
  8	
  9	
  |	
  awk	
  
'{a[0]="+";a[1]="-­‐";a[2]="*";a[3]="/";for(i=0;i<4*4*4;i++)
{print	
  $1	
  a[int(i/16)]	
  $2	
  a[int(i/4)%4]	
  $3	
  a[i%4]	
  $4}}'	
  |	
  perl	
  -­‐
anle	
  'print	
  $F[0],"	
  ",eval($F[0])'	
  |	
  grep	
  "	
  100$"	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 16
•  perl不使用バージョン	
  
–  $	
  echo	
  56	
  2	
  8	
  9	
  |	
  awk	
  '{while(1){print	
  "+	
  -­‐	
  /	
  *",$0}}'	
  |	
  awk	
  
'{print	
  $5	
  $(rand()*4+1)	
  $6	
  $(rand()*4+1)	
  $7	
  $(rand()*4+1)	
  
$8}'	
  |	
  
while	
  read	
  ln	
  ;	
  do	
  A=$(echo	
  $ln	
  |	
  bc)	
  ;	
  echo	
  $ln	
  $A;	
  done	
  |	
  
awk	
  '$2==100{print	
  $0;exit(0)}'	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 17
第4問 ネットから拝借	
•  h=p://ja.wikipedia.org/wiki/ISO_3166-­‐1	
  
(ISO	
  3166-­‐1	
  -­‐-­‐wikipedia)のページから、	
  
	
  
アイスランド IS	
  
アイルランド IE	
  
アゼルバイジャン AZ	
  
アフガニスタン AF	
  
...	
  
	
  
のように、国名と2レターコードの対	
  
のリストを作りましょう。	
  
	
  2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 18
解答	
•  例	
  
–  $	
  curl	
  h=p://ja.wikipedia.org/wiki/ISO_3166-­‐1	
  2>	
  /dev/
null	
  |	
  awk	
  '/<table	
  class="sortable/,/</table>/'	
  |	
  grep	
  -­‐A	
  5	
  
'^<tr'	
  |	
  sed	
  's;.*>(..*)</a></td>;1;'	
  |	
  grep	
  -­‐v	
  "lang="	
  |	
  
grep	
  -­‐v	
  "t[rh]"	
  |	
  sed	
  's;</*td>;;g'	
  |	
  awk	
  '/-­‐-­‐/{print	
  ""}!/-­‐-­‐/
{prinn	
  $1	
  "	
  "}'	
  |	
  awk	
  '{print	
  $1,$4}'	
  
–  出力を確認しながら泥縄式で作ればよい	
  
–  途中でexcelなどに切り替えても特に構わないので、	
  
途中までワンライナーで整理してみる。	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 19
第5問 フィボナッチ数	
•  延々とフィボナッチ数を出力するワンライナー	
  
を記述してください。	
  
ただし桁数が増えてもなるべく正確に。	
  
– 0,1,1,2,3,5,8,13...	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 20
解答	
•  $	
  a=0;	
  b=1;	
  while	
  :	
  ;	
  do	
  c=$(echo	
  "$a+$b"	
  |	
  bc	
  
|	
  tr	
  -­‐d	
  'n')	
  ;	
  echo	
  $a	
  ;	
  a=$b	
  ;	
  b=$c	
  	
  ;	
  done	
  	
  
•  会場から	
  
– ruby	
  -­‐e	
  "a	
  =	
  [1,	
  1];	
  loop	
  {	
  puts	
  n	
  =	
  a.inject(:+);	
  
a.shiz;	
  a	
  <<	
  n;	
  }"	
  	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 21
第6問	
  50音の取得	
•  以下の出力を得てください。	
  
(echo	
  あいうえお・・・以外で)	
  
•  あいうえおかきくけこさしすせそたちつてとな
にぬねのはひふへほまみむめもやゆよらりる
れろわをん	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 22
解答	
•  例(cp932の半角カナから)	
  
– $	
  echo	
  {177..220}	
  166	
  221	
  |	
  tr	
  '	
  '	
  'n'	
  |	
  LANG=C	
  
gawk	
  '{prinn("%c",$1)}'	
  |	
  iconv	
  -­‐f	
  cp932	
  -­‐t	
  un8	
  |	
  
nkf	
  -­‐h1	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 23
第7問 ユニコード一覧作成 	
•  下のようなUnicodeとひらがな(U+3041「ぁ」〜	
  
U+3094「ゔ」)のリストを作成してください。	
  
この問題もiconvを使います。	
  
	
  
U+3041	
  ぁ	
U+3042	
  あ	
U+3043	
  ぃ	
  
...	
  
U+3092	
  を	
U+3093	
  ん	
U+3094	
  ゔ	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 24
解答	
•  $	
  seq	
  0x3041	
  0x3094	
  |	
  
LANG=C	
  gawk	
  '{prinn("%c%c%c%c",int($1/256),$1%256,0,10)}'	
  
|	
  iconv	
  -­‐f	
  UCS-­‐2BE	
  -­‐t	
  un8	
  |	
  
awk	
  -­‐v	
  a="0x3041"	
  '{prinn("U+%X	
  %sn",a++,$0)}'	
  
•  会場から	
  
–  $	
  ruby	
  -­‐e	
  "0x3041.upto(0x3094)	
  {|n|	
  puts	
  'U+%x	
  %s'	
  %	
  [n,	
  [n].pack('U')]}"	
  	
  
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 25
おわりに	
•  おつかれさまでした・・・	
  
– まだLLまつりは続きますので、死なないで下さい。	
  
•  次回はおそらく10月	
  
– お待ちしております。	
2013年8月24日	
第6回チャンピオンシップシェル芸ランナー
勉強会 in	
  LLまつり	
 26

More Related Content

PPTX
EPI – Trabalho em Altura (NR 35)
PDF
Posto de Combustível Siga Bem
PDF
34[1]brincos e pulseiras
PDF
Laudo da serra circular b 100
PPTX
apr - operador de caminhao munck.pptx.02
PDF
Baterias de Empilhadores - Eng Orlando Santos
PDF
Treinamento em trabalho em altura e prevenção de quedas
PPTX
Curso CIPA Segurança do Trabalho nwn.pptx
EPI – Trabalho em Altura (NR 35)
Posto de Combustível Siga Bem
34[1]brincos e pulseiras
Laudo da serra circular b 100
apr - operador de caminhao munck.pptx.02
Baterias de Empilhadores - Eng Orlando Santos
Treinamento em trabalho em altura e prevenção de quedas
Curso CIPA Segurança do Trabalho nwn.pptx

What's hot (20)

PPTX
NR 34,5.pptx
PPT
Ts 1148-007-treinamento para operadores de retro escavadeira
PPTX
Trabalho em altura NR-35 - 8 horas
PDF
SOLDADOR - SENAI.pdf
PPTX
373122257-TREINAMENTO-DE-TALHA hoje.pptx
PDF
APR - ANÁLISE PRELIMINAR DE RISCOS Revisão_ 00 29_08_2014 Atividade Perigo Ca...
DOCX
APR - TRABALHO EM ALTURA COM USO DE PTA - bertolini.docx
PDF
Apr analise preliminar de risco igo
DOC
10 manual segurança no trabalho
PPTX
NR 12
PDF
Ficha inspeção lingas de corrente aricabos
PPT
TREINAMENTO DE NR 20 - OFICIAL - Rev.02.2019.ppt
DOC
Apr acabamento obra
PPT
Treinamento nr 35
PPT
Cipa Arvore De Causas
PDF
Call Center SESI
PDF
Linha de-vida-oara-caminhões
PDF
APOSTILA NR 35 2022.pdf
DOCX
APR - Instalações Elétricas..docx
PPT
Conteúdo de aula nr33
NR 34,5.pptx
Ts 1148-007-treinamento para operadores de retro escavadeira
Trabalho em altura NR-35 - 8 horas
SOLDADOR - SENAI.pdf
373122257-TREINAMENTO-DE-TALHA hoje.pptx
APR - ANÁLISE PRELIMINAR DE RISCOS Revisão_ 00 29_08_2014 Atividade Perigo Ca...
APR - TRABALHO EM ALTURA COM USO DE PTA - bertolini.docx
Apr analise preliminar de risco igo
10 manual segurança no trabalho
NR 12
Ficha inspeção lingas de corrente aricabos
TREINAMENTO DE NR 20 - OFICIAL - Rev.02.2019.ppt
Apr acabamento obra
Treinamento nr 35
Cipa Arvore De Causas
Call Center SESI
Linha de-vida-oara-caminhões
APOSTILA NR 35 2022.pdf
APR - Instalações Elétricas..docx
Conteúdo de aula nr33
Ad

Viewers also liked (10)

PDF
20130622第5回シェル芸勉強会スライド
PDF
20130223 OSC Tokyo/Spring
PDF
Uspstudy20121208qonly
PDF
20130216 シェル芸爆破デスマッチ勉強会
PDF
20130413シェル芸勉強会スライド
PDF
20131222 第8回シェル芸勉強会スライド
PDF
20131102 第7回シェル芸勉強会
PDF
jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
PPTX
第31回シェル芸勉強会スライド
PDF
2012年10月27日 Hbstudy#38
20130622第5回シェル芸勉強会スライド
20130223 OSC Tokyo/Spring
Uspstudy20121208qonly
20130216 シェル芸爆破デスマッチ勉強会
20130413シェル芸勉強会スライド
20131222 第8回シェル芸勉強会スライド
20131102 第7回シェル芸勉強会
jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
第31回シェル芸勉強会スライド
2012年10月27日 Hbstudy#38
Ad

Similar to 20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり (20)

PDF
20130824LLまつりシェル芸勉強会問題集
PDF
Linux女子部第二回勉強会usp友の会
PDF
Uspstudy20121208
PDF
シェル芸初心者によるシェル芸入門
PDF
シェル芸初心者によるシェル芸入門 (修正版)
PDF
20171223 シェル芸勉強会in大都会
PPTX
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
PPTX
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
PDF
awk v.s. bashどっちが強い?@OSC2011Tokyo
PPTX
20150201 シェル芸勉強会LT GlueLangについて (シェル書いてますが何か?)
PDF
初心者向けシェル芸勉強会
PDF
「はじめよう、シェル芸」オープンキャンプin南島原2020/OpenCamp in Minami-shimabara online
PDF
20140614 【問題だけスライド】jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
PDF
Linux女子部勉強会 2012年4月21日
PPTX
第22回シェル芸勉強会イントロ
PPTX
第34回シェル芸勉強会
PPTX
難読化シェル芸
PPTX
USP 友の会 LT 資料 20130413
PDF
2015.08.29 JUS共催勉強会資料
20130824LLまつりシェル芸勉強会問題集
Linux女子部第二回勉強会usp友の会
Uspstudy20121208
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門 (修正版)
20171223 シェル芸勉強会in大都会
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」
awk v.s. bashどっちが強い?@OSC2011Tokyo
20150201 シェル芸勉強会LT GlueLangについて (シェル書いてますが何か?)
初心者向けシェル芸勉強会
「はじめよう、シェル芸」オープンキャンプin南島原2020/OpenCamp in Minami-shimabara online
20140614 【問題だけスライド】jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)
Linux女子部勉強会 2012年4月21日
第22回シェル芸勉強会イントロ
第34回シェル芸勉強会
難読化シェル芸
USP 友の会 LT 資料 20130413
2015.08.29 JUS共催勉強会資料

More from Ryuichi Ueda (20)

PPTX
第27回ロボティクスシンポジアスライド
PPTX
シェル・ワンライナー160本ノック
PPTX
日本ロボット学会第139回ロボット工学セミナー
PPTX
シェル芸勉強会と会場の話
PPTX
移動ロボットのナビゲーション
PPTX
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PPTX
第45回シェル芸勉強会オープニングスライド
PPTX
bash(の変な使い方)update
PPTX
第41回シェル芸勉強会 午後オープニング
PPTX
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
PDF
20181113_子ども夢ロボット&トーク
PPTX
第37回シェル芸勉強会イントロ
PPTX
シェル芸勉強会にみる、コミュニティを通じたIT学習
PPTX
ROSチュートリアル ROBOMECH2018
PDF
poster of PFoE used in ICRA 2018
PPTX
Robot frontier lesson3 2018
PPTX
Robot frontier lesson2 2018
PPTX
Robot frontier lesson1 2018
PPTX
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
PPTX
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド
第27回ロボティクスシンポジアスライド
シェル・ワンライナー160本ノック
日本ロボット学会第139回ロボット工学セミナー
シェル芸勉強会と会場の話
移動ロボットのナビゲーション
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
第45回シェル芸勉強会オープニングスライド
bash(の変な使い方)update
第41回シェル芸勉強会 午後オープニング
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
20181113_子ども夢ロボット&トーク
第37回シェル芸勉強会イントロ
シェル芸勉強会にみる、コミュニティを通じたIT学習
ROSチュートリアル ROBOMECH2018
poster of PFoE used in ICRA 2018
Robot frontier lesson3 2018
Robot frontier lesson2 2018
Robot frontier lesson1 2018
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
2017年10月18日 シェル芸勉強会 meets バイオインフォマティクス vol.1 スライド

20130824 第六回チャンピオンシップシェル芸ランナー勉強会 in LLまつり

  • 1. 第6回チャンピオンシップ   シェル芸ランナー勉強会   in  LLまつり USP友の会/産業技術大学院大学   上田隆一
  • 2. こんにちは •  本セッションは、   アバンギャルドな Lightweight  Language   「シェル(スクリプト)」   のチュートリアルです。 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 2
  • 4. 本日はシェル芸勉強会をやります •  シェル芸とは?   – マウスも使わず、ソースコードも残さず、   GUIツールを立ち上げる間もなく、   あらゆる調査・計算・テキスト処理を   コマンド入力一撃で終わらす。   – 格闘技で言えばコンバットサンボ   •  理屈ばかり言っていると   この人(右図)に殺されると思え 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 4 h=p://www.kremlin.ru
  • 5. これまでのシェル芸勉強会 •  2012年10月(45人)   –  hbstudy#38  シェルスクリプト(Open  usp  Tukubai)で   いろいろやってみよう!   •  2012年12月(25人)   –  USP友の会会長presents第2回チキチキ!シェル芸人養成勉強会   •  2013年2月(32人)   –  第3回シェル芸爆破デスマッチ勉強会   •  2013年4月(53人)   –  第4回春爛漫シェル芸人撩乱勉強会   •  2013年6月(35人)   –  第5回シェル芸勉強会(プレーンタイプ)   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 5 延べ(?)190人   のシェル芸人を   荒野に放つ!!
  • 6. こういう問題を解いてます •  Q.  0〜9までの数字で欠けているものは?     4  3  5  9  8  2   •  A.  $  echo  4  3  5  9  8  2  |  tr  '  '  'n'  |   cat  -­‐  <(seq  0  9)  |  sort  |  uniq  -­‐u  |  tr  'n'  '  '     0  1  6  7   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 6
  • 7. シェル芸勉強会の意義 •  普段の仕事にCUIを役立てるためのスキル   を身につけることが趣旨   – ユーザとしてどうコンピュータを使い倒すか?   •  料理人はひたすら包丁や鍋の評論をするか?   – 料理の方が大事   – 使いこなすことの方が大事   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 7
  • 8. 使うもの •  自分が普段使っているマシーン   •  自分が普段使っているワンライナー環境   – 他流試合大歓迎   •  PerlでもRubyでもPowerShellでもOK   •  解答はMacとbashで作成しました 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 8
  • 10. では始めます •  諸注意   –  全7問   –  コマンドがなかったらその場でインストール願います   –  今回はLLまつりということで、かなり難易度高め   •  あまり実用的でない   –  どんどんツッコンでください(悪意がなければ)   •  ・・・では参りましょう。 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 10
  • 11. 第1問 文字の選別 •  次の文字列について、濁点の文字、半濁点 の文字、その他の文字(記号含む)の数を数 えてください   「どんどこどん、ぱらぱっぱ、ぴろぴろぴー、   すっとこどっこい。」   (注意:特に意味はない。) 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 11
  • 12. 解答 •  半角に直して濁点・半濁点を分離  →  集計   – $  echo  どんどこどん、ぱらぱっぱ、ぴろぴろぴー、 すっとこどっこい。|  gsed  's/./n&/g'  |  nkf  -­‐h2  |  nkf   -­‐Z4  |  sed  's/./&  /'  |  awk  'NF==2{print  $2} NF==1{print  "_"}'  |  sort  |  uniq  -­‐c 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 12
  • 13. 第2問 横にcatする •  二つのファイルを横にくっつけてください   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 13
  • 14. 解答 •  $  awk  '{print  FNR,$0}'  fileA  fileB  |  sort  -­‐s  -­‐k1,1  |   awk  'NR%2==0{print  $2}NR%2==1{prinn  $2}'   •  Open  usp  Tukubaiを使う   –  $  ycat  file{A,B}  |  tr  -­‐d  '  '     •  会場から   – $  paste  file{A,B}  |  tr  -­‐d  't'   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 14
  • 15. 第3問 小町算 •  次のechoから始めて   4つの数字の間に  +  -­‐  *  /  の符号を入れ、   100になる計算式を   ワンライナーで一つ作ってください   •  $  echo  56  2  8  9 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 15
  • 16. 解答 •  ランダムに数式を作って100になったら止める   –  $  echo  56  2  8  9  |  awk  '{while(1){print  "/  +  -­‐  *", $0,int(rand()*4)+1,int(rand()*4)+1,int(rand()*4)+1}}'  |  awk   '{print  $5  $($9)  $6  $($10)  $7  $($11)  $8}'  |  perl  -­‐anle  'print   $F[0],"  ",eval($F[0])'  |  grep  "  100$"  |  head  -­‐n  1   •  律儀に式を作る   –  $  echo  56  2  8  9  |  awk   '{a[0]="+";a[1]="-­‐";a[2]="*";a[3]="/";for(i=0;i<4*4*4;i++) {print  $1  a[int(i/16)]  $2  a[int(i/4)%4]  $3  a[i%4]  $4}}'  |  perl  -­‐ anle  'print  $F[0],"  ",eval($F[0])'  |  grep  "  100$"   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 16
  • 17. •  perl不使用バージョン   –  $  echo  56  2  8  9  |  awk  '{while(1){print  "+  -­‐  /  *",$0}}'  |  awk   '{print  $5  $(rand()*4+1)  $6  $(rand()*4+1)  $7  $(rand()*4+1)   $8}'  |   while  read  ln  ;  do  A=$(echo  $ln  |  bc)  ;  echo  $ln  $A;  done  |   awk  '$2==100{print  $0;exit(0)}' 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 17
  • 18. 第4問 ネットから拝借 •  h=p://ja.wikipedia.org/wiki/ISO_3166-­‐1   (ISO  3166-­‐1  -­‐-­‐wikipedia)のページから、     アイスランド IS   アイルランド IE   アゼルバイジャン AZ   アフガニスタン AF   ...     のように、国名と2レターコードの対   のリストを作りましょう。    2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 18
  • 19. 解答 •  例   –  $  curl  h=p://ja.wikipedia.org/wiki/ISO_3166-­‐1  2>  /dev/ null  |  awk  '/<table  class="sortable/,/</table>/'  |  grep  -­‐A  5   '^<tr'  |  sed  's;.*>(..*)</a></td>;1;'  |  grep  -­‐v  "lang="  |   grep  -­‐v  "t[rh]"  |  sed  's;</*td>;;g'  |  awk  '/-­‐-­‐/{print  ""}!/-­‐-­‐/ {prinn  $1  "  "}'  |  awk  '{print  $1,$4}'   –  出力を確認しながら泥縄式で作ればよい   –  途中でexcelなどに切り替えても特に構わないので、   途中までワンライナーで整理してみる。   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 19
  • 20. 第5問 フィボナッチ数 •  延々とフィボナッチ数を出力するワンライナー   を記述してください。   ただし桁数が増えてもなるべく正確に。   – 0,1,1,2,3,5,8,13...   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 20
  • 21. 解答 •  $  a=0;  b=1;  while  :  ;  do  c=$(echo  "$a+$b"  |  bc   |  tr  -­‐d  'n')  ;  echo  $a  ;  a=$b  ;  b=$c    ;  done     •  会場から   – ruby  -­‐e  "a  =  [1,  1];  loop  {  puts  n  =  a.inject(:+);   a.shiz;  a  <<  n;  }"     2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 21
  • 22. 第6問  50音の取得 •  以下の出力を得てください。   (echo  あいうえお・・・以外で)   •  あいうえおかきくけこさしすせそたちつてとな にぬねのはひふへほまみむめもやゆよらりる れろわをん   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 22
  • 23. 解答 •  例(cp932の半角カナから)   – $  echo  {177..220}  166  221  |  tr  '  '  'n'  |  LANG=C   gawk  '{prinn("%c",$1)}'  |  iconv  -­‐f  cp932  -­‐t  un8  |   nkf  -­‐h1   2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 23
  • 24. 第7問 ユニコード一覧作成 •  下のようなUnicodeとひらがな(U+3041「ぁ」〜   U+3094「ゔ」)のリストを作成してください。   この問題もiconvを使います。     U+3041  ぁ U+3042  あ U+3043  ぃ   ...   U+3092  を U+3093  ん U+3094  ゔ 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 24
  • 25. 解答 •  $  seq  0x3041  0x3094  |   LANG=C  gawk  '{prinn("%c%c%c%c",int($1/256),$1%256,0,10)}'   |  iconv  -­‐f  UCS-­‐2BE  -­‐t  un8  |   awk  -­‐v  a="0x3041"  '{prinn("U+%X  %sn",a++,$0)}'   •  会場から   –  $  ruby  -­‐e  "0x3041.upto(0x3094)  {|n|  puts  'U+%x  %s'  %  [n,  [n].pack('U')]}"     2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 25
  • 26. おわりに •  おつかれさまでした・・・   – まだLLまつりは続きますので、死なないで下さい。   •  次回はおそらく10月   – お待ちしております。 2013年8月24日 第6回チャンピオンシップシェル芸ランナー 勉強会 in  LLまつり 26