シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

26
http://gauc.no-ip.org/awk-users-jp/ 日本 GNU AWK ユーザー会 斉藤 @hi_saito -1- 2014 12 13, 14 シェルスクリプトワークショップ @鳥取環境大学 jus 勉強会 シェルスクリプトワークショップ 初心者向け 「シェル芸」 日本 GNU AWK ユーザー会 斉藤 博文

Upload: hirofumi-saito

Post on 18-Jul-2015

5.551 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 1 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

jus 勉強会

シェルスクリプトワークショップ

初心者向け「シェル芸」

日本 GNU AWKユーザー会

斉藤博文

Page 2: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 2 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

はじめに

Page 3: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

自己紹介

「日本 GNU AWKユーザー会」会長

http://gauc.no-ip.org/awk-users-jp/

[email protected]

@hi_saito

USP Magazine, Codezineに連載中

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 3 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

2 日間、よろしくお願いします

Page 4: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

勉強会で重要なこと

質問しよう

積極的に質問をしてください

振り返ろう

手を動かして実際に試そう

大したことないことを分かろう

自分もいつかは講師をしよう

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 4 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

特に難しいことは話しません

Page 5: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

他の講義とダブる?

それは基本だからです

それは重要だからです

それは間違えやすいからです

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 5 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

単に整合が取れていない言い訳かもしれません

Page 6: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 6 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

シェルスクリプト

Page 7: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

我が家での活用例

コンテンツ Proxy サーバー

いわゆる広告削除

サーバー異常の iPhone へのプッシュ通知

curl で簡単に通知できます

年賀状、喪中ハガキ印刷

下手な印刷ソフトよりも便利です

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 7 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

シェルでほとんどのことができます

Page 8: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 8 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

シェル芸

Page 9: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

シェル芸とは?

シェル芸とは、現代においてもっとも過激と

目される CLI ワンライナー原理主義の一派。

武田久美子を教祖とし、夏になると信者は女

も男も老いも若きも貝がらビキニで海辺を

ホーミタイする危険な思想である。

アンサイクロペディア

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 9 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

ネタが古くて 30 代後半でないと分からない上、違います!

Page 10: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

シェル芸とは?

マウスも使わず、ソースコードも残さず、GUI

ツールを立ち上げる間もなく、あらゆる調

査・計算・テキスト処理を CLI 端末へのコマ

ンド入力一撃で終わらすこと。

シェル芸の定義バージョン 1.0

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 10 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

「USP友の会」の上田会長の定義です

Page 11: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 11 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

今回のテーマ

Page 12: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

基礎を学ぶ

基礎を学びます

いかにパイプで処理を行うか

ちょっと変わったコマンドの使い方

grep, xargsなど

Map Reduce のようなもの

集計の基礎を行います

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 12 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

今までのシェル芸勉強会よりも簡単です

Page 13: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

重要なこと

できなくても構いません

得意、不得意があります

答えが違っても構いません

TIMTOWTDIの精神でやりましょう

手を動かしてください

頭ではなく手を動かしてください

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 13 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

頭もフル活用してください

Page 14: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 14 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

問題 (5 問あります)

Page 15: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

問題 1

1 から 100 までを足してください

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 15 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

Page 16: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

解答例 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

Page 17: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

問題 2

「とうきょうとっきょきょかきょくきょか

きょくちょう」の「きょ」の文字を数えてく

ださい

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 17 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

Page 18: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

解答例 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

Page 19: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

問題 3

「とうきょうとっきょきょかきょくきょか

きょくちょう」の各文字を数えてください

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 19 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

Page 20: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

解答例 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

Page 21: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

問題 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 日シェルスクリプトワークショップ

@鳥取環境大学

Page 22: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

解答例 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

Page 23: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

問題 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 日シェルスクリプトワークショップ

@鳥取環境大学

Page 24: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

解答例 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

Page 25: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 25 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

質問はありますか?

Page 26: シェルスクリプトワークショップ資料 - 初心者向け「シェル芸」

http://gauc.no-ip.org/awk-users-jp/日本 GNU AWKユーザー会斉藤@hi_saito - 26 -

2014 年 12 月 13, 14 日シェルスクリプトワークショップ

@鳥取環境大学

ご清聴ありがとうございました