Uspstudy20121208

2,496 views

Published on

12/8勉強会。sh行。

Published in: Technology

Uspstudy20121208

  1. 1. USP友の会会長 presents 第2回チキチキ! シェル芸人養成勉強会 USP友の会 上田 隆一
  2. 2. 近況● 原稿いっぱい書いてます。2012年12月8日 USP友の会勉強会 2
  3. 3. 今日やること USP友の会が何の会なのか知らしめる2012年12月8日 USP友の会勉強会 3
  4. 4. 今日やること● USP友の会は何の会か知ってますか? – 無停電なんとか装置ではありません。 – 会員殿、我々の会は、なんの会でしょう?2012年12月8日 USP友の会勉強会 4
  5. 5. 今日やること● 【重要】我々の会は、 アル中のリハビリ互助会ではない。 2012年12月8日 USP友の会勉強会 5
  6. 6. 今日やること ● 飲んでばっかりはあかん! – シェル芸で脳味噌デトックス2012年12月8日 USP友の会勉強会 6
  7. 7. シェル芸とは? (スライド再利用!)● マウスも使わず、 プログラムも書かず、 GUIツールを立ち上げる間もなく、 あらゆる調査・計算・ファイル処理を コマンド入力一撃で終わらす。 ※シェル芸人イメージ (麻雀は天和で終わらす) 2012年12月8日 USP友の会勉強会 7
  8. 8. ということで(これも再利用)● 端末操作だけでいろんな仕事を できるようになってもらいます。 – シェルスクリプト?そんな大げさなもんいらん。 – 今回の内容をおさえればクソ長いシェルスクリプトは 書かなくなることでしょう・・・ – 今回はエディタすら使用禁止 2012年12月8日 USP友の会勉強会 8
  9. 9. 時間割● ~18:30 – 最後までワンライナー地獄2012年12月8日 USP友の会勉強会 9
  10. 10. 問題の解き方● 基本はbashかshで● 使えるコマンドはなんでも使え – posixとか気にするのはできるようになってから!● できる人はいろいろな方法で挑戦 – それも終わったら他の人を指導 – 玄人勢の献身がこの勉強会を成功させます!2012年12月8日 USP友の会勉強会 10
  11. 11. 問題1: 文字化けしたファイルの削除● 次のように、空ファイル abc, DEFG と、 文字化けした空ファイルを作ってください。● 文字化けしたファイルを消してください。 ただし、日本語の入力は禁止です。2012年12月8日 USP友の会勉強会 11
  12. 12. 問題1: 答え● シンプルな答え – $ rm [!a-zA-Z]*● 確認してから消す – $ echo [!a-zA-Z]* | xargs rm● ワイルドカードが思いつかない場合 – $ ls | grep [^a-zA-Z] | xargs rm2012年12月8日 USP友の会勉強会 12
  13. 13. 問題2: 計算● 以下のファイル中の数字を全部足し算してください。2012年12月8日 USP友の会勉強会 13
  14. 14. 問題2: 答え● $ cat num | awk {for(i=1;i<=NF;i++) {a+=$i}}END{print a}● $ tr n < num | awk {a+=$1}END{print a}● Tukubai – $ tarr num | sm2 0 0 1 1 – $ yarr num | ysum | self NF2012年12月8日 USP友の会勉強会 14
  15. 15. 問題3: 条件でデータを取り出し● 右のhogeファイルから、 aとbについてそれぞれ一番 大きな数を求めましょう。2012年12月8日 USP友の会勉強会 15
  16. 16. 問題3: 答え● $ cat hoge | sort -k1,1 -k2,2nr | uniq -w 1● $ cat hoge | sort -k1,1 -k2,2nr | sort -u -k1,1● Tukubai 使用 – $ cat hoge | sort -k1,1 -k2,2nr | getfirst 1 1 – $ cat hoge | sort -k1,1 -k2,2n | getlast 1 1 – $ cat hoge | sort -k1,1 -k2,2nr | yarr num=1 | self 1 22012年12月8日 USP友の会勉強会 16
  17. 17. 問題4: 計算● 以下のファイル中の数字を、 キー(a,b)ごとに全部足し算してください。2012年12月8日 USP友の会勉強会 17
  18. 18. 問題4: 答え● $ sort num2 | awk {for(i=1;i<=NF;i++) {if($1=="a"){a+=$i}else{b+=$i}}}END{print a,b}● Tukubai – $ tarr num=1 num2 | sort | sm2 1 1 2 22012年12月8日 USP友の会勉強会 18
  19. 19. 問題5: 日付と曜日● 以下のようにファイルを作って、 何曜日が何日あるか集計してください。2012年12月8日 USP友の会勉強会 19
  20. 20. 問題5: 答え● $ cat osyoga2 | while read d ; do date -d $d ; done | sed s/.*(.)曜日.*$/1/ | sort | uniq -c● $ cat osyoga2 | date -f - | awk {print $4} | sort | uniq -c● Tukubai 使用 – $ cat osyoga2 | yobi -j 1 | self 2 | sort | count 1 1● 日曜日から出力 – $ cat osyoga2 | yobi 1 | yobi -j 1 | self 3 2 | sort | count 1 2 | delf 12012年12月8日 USP友の会勉強会 20
  21. 21. 問題6: ダミーデータの作成● seq 1 100 の出力をランダムに並び替えてください。2012年12月8日 USP友の会勉強会 21
  22. 22. 問題6: 答え● $ seq 1 100 | awk {print rand(),$1} | sort | awk {print $2}● $ seq 1 100 | while read n ; do echo $RANDOM $n ; done | sort | while read m n ; do echo $n ; done2012年12月8日 USP友の会勉強会 22
  23. 23. 問題7: 検索● 大文字小文字を区別しない場合、以下の辞書ファイルから、 重複する単語を検索してください。 – asciiコード以外の字がありますが、 とりあえず気にしないでください。 2012年12月8日 USP友の会勉強会 23
  24. 24. 問題7: 答え● $ cat /usr/share/dict/words | tr A-Z a-z | sort | uniq -d● $ cat /usr/share/dict/words | tr A-Z a-z | sort | uniq -c | awk $1>12012年12月8日 USP友の会勉強会 24
  25. 25. 問題8: ファイルの比較● file2から、file1にない数字を抽出してください。2012年12月8日 USP友の会勉強会 25
  26. 26. 問題8: 答え● $ diff file1 file2 | awk $1==">"{print $2}● $ comm -13 file1 file2● $ cat file2 | grep -v -f file1● $ join -v2 file1 file2● $ awk {print $1,FILENAME} file{1,2} | sort -u -k1,1 | grep file2 | self 1● Tukubai – $ awk {print $1,FILENAME} file{1,2} | sort | yarr num=1 | awk $2~/2$/ | self 1 – $ join0 +ng key=1 file1 file2 > /dev/null2012年12月8日 USP友の会勉強会 26
  27. 27. 問題9: 形式変換● 左のようなファイルを作り、 右のように整形してください。2012年12月8日 USP友の会勉強会 27
  28. 28. 問題9: 答え● $ cat game | awk {print $2,$1,$3} | sort | awk {print $1,$3} | awk BEGIN{k=""}{if(k!=$1){print "";k=$1;printf("%s ",$1)}printf("%s ",$2)}END{print ""} | sed s/^$/ 1 2 3 4 5/● Tukubai使用 – $ map num=1 game | tateyoko | keta | sed s/*/ /2012年12月8日 USP友の会勉強会 28
  29. 29. 問題10: ファイルの結合● file1、file2 から、下の出力を得てください。2012年12月8日 USP友の会勉強会 29
  30. 30. 問題10: 答え● $ sort -ms -k1,1 file1 file2 | awk NR%2==1{printf $0}NR %2==0{print " "$2}● $ sort -m file1 file2 | awk NR%2==1{printf $0}NR %2==0{print " "$2} | awk {print $1,$3,$2}● join file1 file2● Tukubai – $ loopj num=1 file1 file2 – $ join1 key=1 file1 file2 – $ up3 key=1 file1 file2 | yarr num=12012年12月8日 USP友の会勉強会 30
  31. 31. まとめ● お疲れさまでした!!● 2月あたりにまたやりますよ。● さあ、飲みにいきましょう。2012年12月8日 USP友の会勉強会 31

×