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

12,994 views

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
12,994
On SlideShare
0
From Embeds
0
Number of Embeds
10,651
Actions
Shares
0
Downloads
32
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. 第8回クリスマスって何だっけ   シェル芸なら知ってる勉強会 USP友の会 上田 隆一
  2. 2. 近況 •  本、書きました。編集待ち。   •  本、書いてます。   2013/12/22 第8回シェル芸勉強会 2
  3. 3. イントロダクション •  いつもいまいちウケがよくないので割愛 2013/12/22 第8回シェル芸勉強会 3
  4. 4. シェル芸とは? •  毎回書くのが面倒なので続きはWebで   –  h/p://blog.ueda.asia/?page_id=1434 2013/12/22 第8回シェル芸勉強会 4
  5. 5. 今回の進め方 •  ビギナー置いてきぼり現象にメス     •  4〜6人でチーム分け   –  できる人+そこそこの人+ビギナー※   (※自称ビギナー除く)   –  できる人:とりまとめ   –  そこそこの人:考える、ビギナーの人のサポート   –  ビギナーの人:見て真似をする 2013/12/22 第8回シェル芸勉強会 5
  6. 6. •  問題は8問   •  1問15分   •  解答はUbuntu  Linuxで作りました。 2013/12/22 第8回シェル芸勉強会 6
  7. 7. 問題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
  8. 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
  9. 9. 問題2 •  「ユニケージ」「ユニゲージ」「UPS」「USP」の各個数を 数えてください。   –  ユニゲージユニケージユニゲージUSP友の会USP友の会 UPS友の会UPS友の会 2013/12/22 第8回シェル芸勉強会 9
  10. 10. 解答 •  $  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
  11. 11. 問題3 •  次の4個のファイルを作り、同じ内容のものを   探し出すワンライナーを作成してください。   –  echo  12345  >  file1   –  echo  23456  >  file2   –  echo  12345  >  file3   –  echo  45678  >  file4 2013/12/22 第8回シェル芸勉強会 11
  12. 12. 解答 •  $  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
  13. 13. 問題4 •  数字の列を偶数と奇数に分けてください。   ただし、偶数、奇数の列内での数字の並びを   変えないように。   •  例   –  入力:3  8  2  10  1  8  9   –  出力:8  2  10  8  3  1  9   2013/12/22 第8回シェル芸勉強会 13
  14. 14. 解答 •  $  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
  15. 15. 問題5 •  次のように連続した0と1の数を数え、   次のように変換してください   –  0と1が連続したときは0  or  1の後ろに   個数をつけてスペースを挿入   –  0と1が連続していないときはスペース区切りでそのまま出力   –  例   •  入力:  000001111111111001010   •  出力:  05  110  02  1  0  1  0 2013/12/22 第8回シェル芸勉強会 15
  16. 16. 解答 •  $  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
  17. 17. 問題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
  18. 18. 解答 •  $  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
  19. 19. 問題7 •  次の文字列は、数字3桁の安直なパスワードを   MD5ハッシュしたものです。   パスワードを破ってください。   「250cf8b51c773f3f8dc8b4be867a9a02」   –  注意:MD5値を求めるときには改行記号を入れていません。 2013/12/22 第8回シェル芸勉強会 19
  20. 20. 解答 •  $  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
  21. 21. 問題8 •  /usr/share/dict/wordsでしりとりを完成させてくださ い   –  8つ以上単語を並べること   •  辞書のインストール   –  sudo  apt-­‐get  install  wamerican等   2013/12/22 第8回シェル芸勉強会 21
  22. 22. 解答 •  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
  23. 23. おわりに •  カレー屋に移動!   2013/12/22 第8回シェル芸勉強会 23

×