Upload
hirofumi-saito
View
5.551
Download
4
Embed Size (px)
Citation preview
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 1 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
jus 勉強会
シェルスクリプトワークショップ
初心者向け「シェル芸」
日本 GNU AWKユーザー会
斉藤博文
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 2 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
はじめに
自己紹介
「日本 GNU AWKユーザー会」会長
http://gauc.no-ip.org/awk-users-jp/
@hi_saito
USP Magazine, Codezineに連載中
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 3 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
2 日間、よろしくお願いします
勉強会で重要なこと
質問しよう
積極的に質問をしてください
振り返ろう
手を動かして実際に試そう
大したことないことを分かろう
自分もいつかは講師をしよう
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 4 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
特に難しいことは話しません
他の講義とダブる?
それは基本だからです
それは重要だからです
それは間違えやすいからです
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 5 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
単に整合が取れていない言い訳かもしれません
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 6 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
シェルスクリプト
我が家での活用例
コンテンツ Proxy サーバー
いわゆる広告削除
サーバー異常の iPhone へのプッシュ通知
curl で簡単に通知できます
年賀状、喪中ハガキ印刷
下手な印刷ソフトよりも便利です
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 7 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
シェルでほとんどのことができます
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 8 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
シェル芸
シェル芸とは?
シェル芸とは、現代においてもっとも過激と
目される CLI ワンライナー原理主義の一派。
武田久美子を教祖とし、夏になると信者は女
も男も老いも若きも貝がらビキニで海辺を
ホーミタイする危険な思想である。
アンサイクロペディア
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 9 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
ネタが古くて 30 代後半でないと分からない上、違います!
シェル芸とは?
マウスも使わず、ソースコードも残さず、GUI
ツールを立ち上げる間もなく、あらゆる調
査・計算・テキスト処理を CLI 端末へのコマ
ンド入力一撃で終わらすこと。
シェル芸の定義バージョン 1.0
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 10 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
「USP友の会」の上田会長の定義です
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 11 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
今回のテーマ
基礎を学ぶ
基礎を学びます
いかにパイプで処理を行うか
ちょっと変わったコマンドの使い方
grep, xargsなど
Map Reduce のようなもの
集計の基礎を行います
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 12 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
今までのシェル芸勉強会よりも簡単です
重要なこと
できなくても構いません
得意、不得意があります
答えが違っても構いません
TIMTOWTDIの精神でやりましょう
手を動かしてください
頭ではなく手を動かしてください
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 13 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
頭もフル活用してください
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 14 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
問題 (5 問あります)
問題 1
1 から 100 までを足してください
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 15 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
解答例 1
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 16 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
$ seq 1 100 | xargs | tr ' ' '+' | bc
$ seq 1 100 | xargs | sed 's:[ ]:+:g' | bc
$ seq 1 100 | awk '{v+=$0}END{print v}'
List: 解答例 1
xargs コマンドの使い方を知ろう
sed の区切りは "/" ではなく、":" が便利
Demo
問題 2
「とうきょうとっきょきょかきょくきょか
きょくちょう」の「きょ」の文字を数えてく
ださい
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 17 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
解答例 2
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 18 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
$ echo 'とうきょうとっきょきょかきょくきょかきょくちょう' |\grep -o 'きょ' |\wc -l
$ echo 'とうきょうとっきょきょかきょくきょかきょくちょう' |\awk '{print gsub(/きょ/, "")}'
List: 解答例 2
grep の -o オプションは便利
Demo
問題 3
「とうきょうとっきょきょかきょくきょか
きょくちょう」の各文字を数えてください
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 19 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
解答例 3
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 20 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
$ echo -n 'とうきょうとっきょきょかきょくきょかきょくちょう' |\sed 's:.:&\n:g' |\sort | uniq -c | sort -nr
$ echo 'とうきょうとっきょきょかきょくきょかきょくちょう' |\sed 's:.:&\n:g' |\awk 'NF' |\sort | uniq -c | sort -nr
List: 解答例 3
"sort | uniq -c | sort -n" は慣用句
空行削除は AWK で
Demo
問題 4
「1 2 3 4 5 6 7 8 9 10」を 2 文字づつフリップ
してください
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 21 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
解答例 4
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 22 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
$ seq 1 10 |\xargs |\xargs -n 2 |\awk '{print $2, $1}' |\xargs
List: 解答例 4
それぞれの xargsの挙動をみてみよう
Demo
問題 5
1 から 100 までを FizzBuzzしてください
3 の倍数の時に Fizz、5 の倍数の時に Buzz
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 23 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
解答例 5
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 24 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
$ seq 1 100 |\awk '{print $0%15?$0%5?$0%3?$0:"Fizz":"Buzz":"FizzBuzz"}'
List: 解答例 5
これはいろいろな方法があると思います
Demo
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 25 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
質問はありますか?
http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 26 -
2014 年 12 月 13, 14 日シェルスクリプトワークショップ
@鳥取環境大学
ご清聴ありがとうございました