Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

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

13.871 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

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

×