More Related Content
Similar to Uspstudy20121208
Similar to Uspstudy20121208 (8)
More from Ryuichi Ueda (20)
Uspstudy20121208
- 2. 近況
● 原稿いっぱい書いてます。
2012年12月8日 USP友の会勉強会 2
- 3. 今日やること
USP友の会が何の会なのか知らしめる
2012年12月8日 USP友の会勉強会 3
- 4. 今日やること
● USP友の会は何の会か知ってますか?
– 無停電なんとか装置ではありません。
– 会員殿、我々の会は、なんの会でしょう?
2012年12月8日 USP友の会勉強会 4
- 5. 今日やること
● 【重要】我々の会は、
アル中のリハビリ互助会ではない。
2012年12月8日 USP友の会勉強会 5
- 6. 今日やること
● 飲んでばっかりはあかん!
– シェル芸で脳味噌デトックス
2012年12月8日 USP友の会勉強会 6
- 7. シェル芸とは? (スライド再利用!)
● マウスも使わず、
プログラムも書かず、
GUIツールを立ち上げる間もなく、
あらゆる調査・計算・ファイル処理を
コマンド入力一撃で終わらす。
※シェル芸人イメージ
(麻雀は天和で終わらす)
2012年12月8日 USP友の会勉強会 7
- 8. ということで(これも再利用)
● 端末操作だけでいろんな仕事を
できるようになってもらいます。
– シェルスクリプト?そんな大げさなもんいらん。
– 今回の内容をおさえればクソ長いシェルスクリプトは
書かなくなることでしょう・・・
– 今回はエディタすら使用禁止
2012年12月8日 USP友の会勉強会 8
- 9. 時間割
● ~18:30
– 最後までワンライナー地獄
2012年12月8日 USP友の会勉強会 9
- 10. 問題の解き方
● 基本はbashかshで
● 使えるコマンドはなんでも使え
– posixとか気にするのはできるようになってから!
● できる人はいろいろな方法で挑戦
– それも終わったら他の人を指導
– 玄人勢の献身がこの勉強会を成功させます!
2012年12月8日 USP友の会勉強会 10
- 11. 問題1: 文字化けしたファイルの削除
● 次のように、空ファイル abc, DEFG と、
文字化けした空ファイルを作ってください。
● 文字化けしたファイルを消してください。
ただし、日本語の入力は禁止です。
2012年12月8日 USP友の会勉強会 11
- 12. 問題1: 答え
● シンプルな答え
– $ rm [!a-zA-Z]*
● 確認してから消す
– $ echo [!a-zA-Z]* | xargs rm
● ワイルドカードが思いつかない場合
– $ ls | grep '[^a-zA-Z]' | xargs rm
2012年12月8日 USP友の会勉強会 12
- 13. 問題2: 計算
● 以下のファイル中の数字を全部足し算してください。
2012年12月8日 USP友の会勉強会 13
- 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 NF
2012年12月8日 USP友の会勉強会 14
- 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 2
2012年12月8日 USP友の会勉強会 16
- 17. 問題4: 計算
● 以下のファイル中の数字を、
キー(a,b)ごとに全部足し算してください。
2012年12月8日 USP友の会勉強会 17
- 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 2
2012年12月8日 USP友の会勉強会 18
- 19. 問題5: 日付と曜日
● 以下のようにファイルを作って、
何曜日が何日あるか集計してください。
2012年12月8日 USP友の会勉強会 19
- 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 1
2012年12月8日 USP友の会勉強会 20
- 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 ; done
2012年12月8日 USP友の会勉強会 22
- 23. 問題7: 検索
● 大文字小文字を区別しない場合、以下の辞書ファイルから、
重複する単語を検索してください。
– asciiコード以外の字がありますが、
とりあえず気にしないでください。
2012年12月8日 USP友の会勉強会 23
- 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>1'
2012年12月8日 USP友の会勉強会 24
- 25. 問題8: ファイルの比較
● file2から、file1にない数字を抽出してください。
2012年12月8日 USP友の会勉強会 25
- 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/null
2012年12月8日 USP友の会勉強会 26
- 27. 問題9: 形式変換
● 左のようなファイルを作り、
右のように整形してください。
2012年12月8日 USP友の会勉強会 27
- 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
- 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=1
2012年12月8日 USP友の会勉強会 30
- 31. まとめ
● お疲れさまでした!!
● 2月あたりにまたやりますよ。
● さあ、飲みにいきましょう。
2012年12月8日 USP友の会勉強会 31