Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

20130223 OSC Tokyo/Spring

13,445 views

Published on

オープンソースカンファレンス 2013 Tokyo/Spring での講演。研究所名義だけどほとんど友の会の内容。ビジネス版コマンドを少し使用。

Published in: Technology

20130223 OSC Tokyo/Spring

  1. 1. 覚えて楽するシェル一行野郎10選!   魅せます☆華麗なシェル芸! USP研究所 上田隆一
  2. 2. シェル芸とは? •  「マウスも使わず、ソースコードも残さず、   GUIツールを立ち上げる間もなく、   あらゆる調査・計算・テキスト処理を   コマンド入力一撃で終わらす。」こと   –  昨年10月のHbstudy#38で初めて使った言葉   –  現在は  Windows  PowerShell  まで飛び火   •  密かなブームか? 2013/02/23 OSC  2013  Tokyo/Spring 2
  3. 3. シェル芸勉強会 •  3時間で10問、ワンライナーの問題を解く  •  例題:     –  文字数を数えてください。   –  答え:   •  $  cat  aiueo  |  tr  -­‐d  n  |  wc  –m  など多数  2013/02/23 OSC  2013  Tokyo/Spring 3
  4. 4. 「シェル芸」の狙い •  USP研究所のやっていることを理解してもらう   –  端末叩いたことの無い人には全く理解されない    •  バイアスの是正   –  いまさら「シェルが便利」などと言うエバンジェリストはいない   –  とても便利なのだが、普通は興味の範囲内にならない   •  若い人は使ってない。   •  知らない人を見ていると、  1  +  1  を計算するのに   群論を持ち出しているように見える。  2013/02/23 OSC  2013  Tokyo/Spring 4
  5. 5. 「シェル芸」の狙い(続き) •  スキルトランスファー   –  「シェル芸勉強会」参加者   •  講師   –  問題と解答を作る(解答はだいたい不完全で、別解が存在)   •  玄人   –  経験・うんちく多し、マニアックで便利なオプションを知っている、 勉強会荒らし。ただしパズルを出すと解けないことが多い •  玄人ではない人 玄人 v.s.  講師の(平和な)突っ込み合戦を聴き、   全員が勉強する。 2013/02/23 OSC  2013  Tokyo/Spring 5
  6. 6. これまで •  2012/10/27   –  シェルスクリプトでいろいろやってみよう(Hbstudy#38  )  •  2012/12/8   –  第二回チキチキ シェル芸人養成勉強会  •  2013/2/16   –  第三回シェル芸爆破デスマッチ   –  sed  の問題を中心に  •  これからも需要がある限り2ヶ月に1回開催予定   –  4/13(土)予定  2013/02/23 OSC  2013  Tokyo/Spring 6
  7. 7. 今日の内容 •  個人的に面白い/役に立つシェル芸10個を紹介  •  せっかくUSP研究所名義で発表するので、   いくつかはビジネス版で拡張シェル芸をお魅せします。   (大風呂敷)  2013/02/23 OSC  2013  Tokyo/Spring 7
  8. 8. 1.  FizzBuzz(準備運動) •  こういう出力を得る   –  1,2,Fizz,4,Buzz,Fizz,7,8,Buzz,Buzz,11,Fizz, 13,14,FizzBuzz,16,…  •  短く書くこと。    2013/02/23 OSC  2013  Tokyo/Spring 8
  9. 9. 解答 •  $  seq  1  16  |  awk  $1%3==0{prin]  "Fizz"}$1%5==0{prin]   "Buzz"}{print  "  ",$1}  |  awk  {print  $1}  |  tr  n  , 2013/02/23 OSC  2013  Tokyo/Spring 9
  10. 10. 2.  数を数える •  テキストファイル(原稿)から   「Ubuntu」の文字を数える  2013/02/23 OSC  2013  Tokyo/Spring 10
  11. 11. 解答 •  $  grep  Ubuntu  *.rst  |  sed  s/:.*//  |  sort  |  uniq  -­‐c 2013/02/23 OSC  2013  Tokyo/Spring 11
  12. 12. 3.  データ抽出 •  キー  a,  b  それぞれについて、一番大きい数字 を取り出してください。 2013/02/23 OSC  2013  Tokyo/Spring 12
  13. 13. 解答 •  $  cat  hoge  |  sort  -­‐k1,1  -­‐k2,2nr  |  uniq  -­‐w  1   (Mac  等だと guniq  を使う) 2013/02/23 OSC  2013  Tokyo/Spring 13
  14. 14. 4.    日付の計算 •  1978年2月16日は、   2013年2月23日の何日前でしょう? 2013/02/23 OSC  2013  Tokyo/Spring 14
  15. 15. 解答 •  Mac   –  $  echo  $(gdate  +%s  -­‐d  20130223)  $(gdate  +%s  -­‐d   19780216)  |  awk  {print  $1-­‐$2}  |  awk  {print  $1/ (24*60*60)}   (gdate  インストールのこと)  •  Linux等   –  echo  19780216  20130223  |  tr      ¥n  |  date  +%s  –f   -­‐  |  tr  ¥n      |  awk  {print  $1-­‐$2}  |  awk  {print  $1/ (24*60*60)} 2013/02/23 OSC  2013  Tokyo/Spring 15
  16. 16. 5.  リストにないものを探す •  1から10までの数字のうち、numにないものは? 2013/02/23 OSC  2013  Tokyo/Spring 16
  17. 17. 解答 •  $  seq  1  10  |  cat  -­‐  num  |  sort  |  uniq  –u  •  $  sort  num  <(seq  1  10)  |  uniq  -­‐u 2013/02/23 OSC  2013  Tokyo/Spring 17
  18. 18. 6.  エクセルの読み書き •  ビジネス版   –  読み   •  $  rexcelx  1  book.xlsx     –  書き   •  $  echo  {1..10}  |  wexcelx  ./book.xlsx  1  A7  -­‐  >  out.xlsx  2013/02/23 OSC  2013  Tokyo/Spring 18
  19. 19. 7.  速いソート   •  1億行のデータのソート  2013/02/23 OSC  2013  Tokyo/Spring 19
  20. 20. 解答(というよりベンチマーク) 2013/02/23 OSC  2013  Tokyo/Spring 20
  21. 21. 8.  ソートして集計 2013/02/23 OSC  2013  Tokyo/Spring 21
  22. 22. 9.  足し算する(精度よく) •  答え:212702.890832364364363 2013/02/23 OSC  2013  Tokyo/Spring 22
  23. 23. 解答 •  $  cat  num  |  sed  s/$/  +  /  |  tr  -­‐d  n  |  awk   {print}  |  sed  s/+  -­‐/+  /g  |  sed  s/+  $//  |  bc  •  $  sm2  0  0  1  1  num 2013/02/23 OSC  2013  Tokyo/Spring 23
  24. 24. 10.  横に並んだ数字のソート •  各行について、数字を小さい方から横に並べる。 2013/02/23 OSC  2013  Tokyo/Spring 24
  25. 25. 解答 •  $  cat  file  |  cat  -­‐n  |  awk  {for(i=2;i<=NF;i++)   {print  $1,$i}}  |  sort  -­‐k1,1n  -­‐k2,2n  |     awk  {if($1!=a){a=$1;prin]  "n"};print  $2}  |  tr  n      |   tr  n  n  |  awk  NF!=0  •  $  cat  file  |  juni  |  tarr  num=1  |  sort  -­‐k1,1n  -­‐k2,2n  |   yarr  num=1  |  delf  1  2013/02/23 OSC  2013  Tokyo/Spring 25
  26. 26. まとめ •  端末は(シェル芸で修行すれば)便利  •  4/13(予定)遊びに来てください 2013/02/23 OSC  2013  Tokyo/Spring 26

×