20131222 第8回シェル芸勉強会スライド

23
8回クリスマスって何だっけ シェル芸なら知ってる勉強会 USP友の会 上田 隆一

Upload: ryuichi-ueda

Post on 13-Nov-2014

6.576 views

Category:

Technology


0 download

DESCRIPTION

2013/12/22 シェル芸勉強会@KDDIウェブコミュニケーションズ

TRANSCRIPT

Page 1: 20131222 第8回シェル芸勉強会スライド

第8回クリスマスって何だっけ  シェル芸なら知ってる勉強会

USP友の会 上田 隆一

Page 2: 20131222 第8回シェル芸勉強会スライド

近況

•  本、書きました。編集待ち。  •  本、書いてます。  

2013/12/22 第8回シェル芸勉強会 2

Page 3: 20131222 第8回シェル芸勉強会スライド

イントロダクション

•  いつもいまいちウケがよくないので割愛

2013/12/22 第8回シェル芸勉強会 3

Page 4: 20131222 第8回シェル芸勉強会スライド

シェル芸とは?

•  毎回書くのが面倒なので続きはWebで  – h/p://blog.ueda.asia/?page_id=1434

2013/12/22 第8回シェル芸勉強会 4

Page 5: 20131222 第8回シェル芸勉強会スライド

今回の進め方

•  ビギナー置いてきぼり現象にメス    

•  4〜6人でチーム分け  – できる人+そこそこの人+ビギナー※  

(※自称ビギナー除く)  

– できる人:とりまとめ  – そこそこの人:考える、ビギナーの人のサポート  – ビギナーの人:見て真似をする

2013/12/22 第8回シェル芸勉強会 5

Page 6: 20131222 第8回シェル芸勉強会スライド

•  問題は8問  •  1問15分  

•  解答はUbuntu  Linuxで作りました。

2013/12/22 第8回シェル芸勉強会 6

Page 7: 20131222 第8回シェル芸勉強会スライド

問題1

•  二つずつ数字をフリップしてください  

•  例  – 入力:  1  2  3  4  5  6  7  8  9  10  – 出力:  2  1  4  3  6  5  8  7  10  9

2013/12/22 第8回シェル芸勉強会 7

Page 8: 20131222 第8回シェル芸勉強会スライド

解答

•  $  echo  {1..10}  |  xargs  -­‐n  2  |  awk  '{print  $2,$1}'  |  xargs    

•  $  echo  {1..10}  |    awk  '{for(i=1;i<=9;i+=2){print  $(i+1),$i}}'  |  xargs  

•  $  echo  {1..10}  |  sed  's/[0-­‐9]*  [0-­‐9]*  /&\n/g'  |    awk  '{print  $2,$1}'  |xargs  

•  Tukubai使用  –  $  echo  {1..10}  |  yarr  -­‐2  |  self  2  1  |  yarr  

2013/12/22 第8回シェル芸勉強会 8

Page 9: 20131222 第8回シェル芸勉強会スライド

問題2

•  「ユニケージ」「ユニゲージ」「UPS」「USP」の各個数を数えてください。  –  ユニゲージユニケージユニゲージUSP友の会USP友の会UPS友の会UPS友の会

2013/12/22 第8回シェル芸勉強会 9

Page 10: 20131222 第8回シェル芸勉強会スライド

解答

•  $  echo  <省略>|    grep  -­‐oE  "(ユニゲージ|ユニケージ|USP|UPS)"  |  sort  |  uniq  -­‐c  

•  ファイルを使う方法  –  $  cat  memo  

                     ユニケージ

ユニゲージ

                     USP                        UPS  

–  $  echo  <省略>|  grep  -­‐o  -­‐f  memo  |  sort  |  uniq  -­‐c  

2013/12/22 第8回シェル芸勉強会 10

Page 11: 20131222 第8回シェル芸勉強会スライド

問題3

•  次の4個のファイルを作り、同じ内容のものを  探し出すワンライナーを作成してください。  –  echo  12345  >  file1  –  echo  23456  >  file2  –  echo  12345  >  file3  –  echo  45678  >  file4

2013/12/22 第8回シェル芸勉強会 11

Page 12: 20131222 第8回シェル芸勉強会スライド

解答

•  $  ls  file[1-­‐4]  |  xargs  md5sum  |    awk  '{a[$1]  =  a[$1]"  "$2}END{for(v  in  a){print  a[v]}}'  |  awk  'NF>1'  

•  Tukubai使用  –  $  ls  file[1-­‐4]  |  xargs  md5sum  |  sort  |  yarr  num=1  |  awk  'NF>2'

2013/12/22 第8回シェル芸勉強会 12

Page 13: 20131222 第8回シェル芸勉強会スライド

問題4

•  数字の列を偶数と奇数に分けてください。  ただし、偶数、奇数の列内での数字の並びを  変えないように。  

•  例  –  入力:3  8  2  10  1  8  9  –  出力:8  2  10  8  3  1  9  

2013/12/22 第8回シェル芸勉強会 13

Page 14: 20131222 第8回シェル芸勉強会スライド

解答

•  $  echo  3  8  2  10  1  8  9  |  tr  '  '  '\n'  |  awk  '{print  $1%2,$1}'  |  sort  -­‐s  -­‐k1,1  |  awk  '{print  $2}'  |  xargs  

 •  $  echo  3  8  2  10  1  8  9  |  tr  '  '  '\n'  |    awk  'BEGIN{b=0}$1%2{a[b]=$1;b++}$1%2==0{print}END{for(i=0;i<b;i++){print  a[i]}}'  |  xargs  

2013/12/22 第8回シェル芸勉強会 14

Page 15: 20131222 第8回シェル芸勉強会スライド

問題5

•  次のように連続した0と1の数を数え、  次のように変換してください  –  0と1が連続したときは0  or  1の後ろに  

個数をつけてスペースを挿入  –  0と1が連続していないときはスペース区切りでそのまま出力  

–  例  •  入力:  000001111111111001010  •  出力:  05  110  02  1  0  1  0

2013/12/22 第8回シェル芸勉強会 15

Page 16: 20131222 第8回シェル芸勉強会スライド

解答

•  $  echo  000001111111111001010  |  sed  's/./&\n/g'  |    uniq  -­‐c  |  awk  'NF==2{print  $2,$1}'  |    sed  's/  1$//'  |  tr  -­‐d  '  '  |  xargs

2013/12/22 第8回シェル芸勉強会 16

Page 17: 20131222 第8回シェル芸勉強会スライド

問題6

•  数字の列を次のように整形してください  –  小さい順に空白区切りで並んだ自然数に対し、  2個以上の数字が連続した場合は両端の数字だけ残して  間にハイフンを入れる  

–  例  •  入力:1  2  3  5  6  8  10  11  12  15  •  出力:1-­‐3  5-­‐6  8  10-­‐12  15  

2013/12/22 第8回シェル芸勉強会 17

Page 18: 20131222 第8回シェル芸勉強会スライド

解答 •  $  echo  1  2  3  5  6  8  10  11  12  15  |  tr  '  '  '\n'  |    

awk  'BEGIN{a=1}{print  ($1-­‐a==1?",":"  ")$1;a=$1}'  |    tr  -­‐d  '\n'  |  sed  's/$/\n/g'  |  sed  's/,[^  ]*,/-­‐/g'  |  tr  ","  "-­‐"  

•  $  echo  1  2  3  5  6  8  10  11  12  15  |    awk  '{for(i=1;i<=NF;i++){print  $i,$(i+1)-­‐$i}}'  |    awk  '$2==1{print  $1","}$2!=1{print  $1"  "}'  |    tr  -­‐d  '\n'  |  tr  ','  '-­‐'  |  sed  's/-­‐[0-­‐9]*-­‐/-­‐/g'  |  awk  '{print}'  

•  $  echo  1  2  3  5  6  8  10  11  12  15  |  xargs  -­‐n  1  |    awk  '{print  $1,$i-­‐a;a=$1}'  |  awk  '$2>1{print  "";prino  $1"  "}$2==1{prino  $1"  "}'  |    awk  '{print  $1,$NF}'  |  awk  '$1==$2{print  $1}$1!=$2{print}'  |    tr  '  '  '-­‐'  |  xargs

2013/12/22 第8回シェル芸勉強会 18

Page 19: 20131222 第8回シェル芸勉強会スライド

問題7

•  次の文字列は、数字3桁の安直なパスワードを  MD5ハッシュしたものです。  パスワードを破ってください。  

「250cf8b51c773f3f8dc8b4be867a9a02」  

–  注意:MD5値を求めるときには改行記号を入れていません。

2013/12/22 第8回シェル芸勉強会 19

Page 20: 20131222 第8回シェル芸勉強会スライド

解答

•  $  seq  -­‐w  000  999  |    while  read  n  ;  do  echo  -­‐n  $n"  "  ;echo  -­‐n  $n  |    md5sum;  done  |  grep  250cf8b51  

•  $  echo  'echo  -­‐n  @"  ";  echo  -­‐n  @  |  md5sum'  |    awk  '{for(i=0;i<=999;i++){print}}'  |    awk  '{gsub(/@/,sprino("%03d",NR-­‐1),$0);print}'  |    sh  |  grep  250cf8b51  

2013/12/22 第8回シェル芸勉強会 20

Page 21: 20131222 第8回シェル芸勉強会スライド

問題8

•  /usr/share/dict/wordsでしりとりを完成させてください  –  8つ以上単語を並べること  

•  辞書のインストール  –  sudo  apt-­‐get  install  wamerican等  

2013/12/22 第8回シェル芸勉強会 21

Page 22: 20131222 第8回シェル芸勉強会スライド

解答

•  Tukubai使用  –  $  sort  -­‐R  /usr/share/dict/words  |  yarr  -­‐2  |    

awk  'substr($1,length($1),1)  ==  substr($2,1,1)'  |    sort  -­‐R  |  yarr  -­‐4  |  awk  'substr($2,length($2),1)  ==  substr($3,1,1)'  |    sort  -­‐R  |  yarr  -­‐8  |  awk  'substr($4,length($4),1)  ==  substr($5,1,1)'  

•  インチキ  –  $  grep  '^s'  /usr/share/dict/words  |  grep  's$'  |  tr  '\n'  '  '

2013/12/22 第8回シェル芸勉強会 22

Page 23: 20131222 第8回シェル芸勉強会スライド

おわりに

•  カレー屋に移動!  

2013/12/22 第8回シェル芸勉強会 23