SlideShare a Scribd company logo
1 of 26
Download to read offline
第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

What's hot

Paroxysmal nocturnal hemoglobinuria fari
Paroxysmal nocturnal hemoglobinuria   fariParoxysmal nocturnal hemoglobinuria   fari
Paroxysmal nocturnal hemoglobinuria fari
Fariha Saleem
 
The silence of the lambs campaign research
The silence of the lambs campaign researchThe silence of the lambs campaign research
The silence of the lambs campaign research
jacbosdofsadf
 

What's hot (8)

감마가 어디감마
감마가 어디감마감마가 어디감마
감마가 어디감마
 
Paroxysmal nocturnal hemoglobinuria fari
Paroxysmal nocturnal hemoglobinuria   fariParoxysmal nocturnal hemoglobinuria   fari
Paroxysmal nocturnal hemoglobinuria fari
 
The silence of the lambs campaign research
The silence of the lambs campaign researchThe silence of the lambs campaign research
The silence of the lambs campaign research
 
충돌 알고리즘(collision detection algorithms)
충돌 알고리즘(collision detection algorithms)충돌 알고리즘(collision detection algorithms)
충돌 알고리즘(collision detection algorithms)
 
Technical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab SystemTechnical Deep Dive into the New Prefab System
Technical Deep Dive into the New Prefab System
 
Paroles de sages
Paroles de sagesParoles de sages
Paroles de sages
 
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 1. 활성화 함수
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 1. 활성화 함수[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 1. 활성화 함수
[컴퓨터비전과 인공지능] 10. 신경망 학습하기 파트 1 - 1. 활성화 함수
 
High Risk Smoldering Myeloma
High Risk Smoldering MyelomaHigh Risk Smoldering Myeloma
High Risk Smoldering Myeloma
 

Viewers also liked

Viewers also liked (10)

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

More from Ryuichi Ueda

More from Ryuichi Ueda (20)

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

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