jus & usp友の会共催...

40
. . . . . . タイムテーブル 自己紹介 . . . . . . . . . . . . . . . ソフトウェアツールと AWKsed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル) . . . シェルワンライナー勉強会@関西 (第 11 回シェル芸勉強会) 主催: 日本 UNIX ユーザ会 & USP 友の会 会場: ECC コンピュータ専門学校 上田隆一 USP 友の会/産業技術大学院大学 June 14, 2014 June 14, 2014 1 / 40

Upload: ryuichi-ueda

Post on 12-Nov-2014

5.145 views

Category:

Science


4 download

DESCRIPTION

2014/6/14 @ECCコンピュータ専門学校

TRANSCRIPT

Page 1: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

.

.

. ..

.

.

シェルワンライナー勉強会@関西(第 11回シェル芸勉強会)

主催: 日本 UNIXユーザ会 & USP友の会

会場: ECCコンピュータ専門学校

上田隆一

USP 友の会/産業技術大学院大学

June 14, 2014

June 14, 2014 1 / 40

Page 2: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

タイムテーブル

14:00-14:05: 開会の挨拶

14:05-14:30: ソフトウェアツールと AWK・sedについて座学

14:30-14:40: チーム分け・休憩

14:40-16:00: 前半戦(簡単な問題・基礎操作)

16:15-17:35: 後半戦(応用、パズル)

17:35-17:45: クロージング

タイムテーブル June 14, 2014 2 / 40

Page 3: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

自己紹介

上田隆一(36)USP友の会会長産業技術大学院大学助教USP研究所アドバイザリーフェロー

仕事ロボットの研究コンピュータ関連のなにかいろいろ

自己紹介 June 14, 2014 3 / 40

Page 4: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

最近の話題: 本が出ます!フルスクラッチから 1日で CMSを作るシェルスクリプト高速開発手法入門

CMSといってもマイクロな CMSですが、「シェルスクリプトで CGI」というお題を真面目に扱ってます7/1発売予定 .. Link

もう一冊書いていて今月末閉め切り死亡こちらは完全にシェル芸の本

自己紹介 June 14, 2014 4 / 40

Page 5: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

シェル芸勉強会とは

コマンドをつなげるタイプのワンライナーを体得する会もう 11回目

何がうれしいか?表計算ソフトやエディタでチマチマやっていた作業が瞬殺できる機会が増加

CLI(command line interface)に親しむ余計な情報がなく高度に抽象化された世界で仕事わけのわからん GUIソフトで OSが不安定になる機会激減

プログラマとしての訓練結局俺ら何やってんだ?→データの加工

自己紹介 June 14, 2014 5 / 40

Page 6: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

14:05-14:30: ソフトウェアツールと AWK・sedについて

ソフトウェアツールと AWK・sed について June 14, 2014 6 / 40

Page 7: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

コマンド

端末からプログラムを立ち上げるときに使う文字列あるいはプログラムそのもの

UNIX系では最初からインストールされている何のため?

システムを操作するためのものiptables, service, reboot, shutdown, ...

それ以外grep, echo, cat, seq, ...

本日は「それ以外」のコマンドの話何のためにあるの?何で標準で入っているの?

ソフトウェアツールと AWK・sed について コマンド・ソフトウェアツール June 14, 2014 7 / 40

Page 8: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

コマンドの由来

UNIX黎明期の逸話から出典

M. Hauben and R. Hauben: “Netizens: On the History andImpact of Usenet and the Internet,” Wiley-IEEE, 1997.

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 8 / 40

Page 9: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

grepの誕生

Unixは(名目上)特許のドキュメント管理システムとして開発された

AT&Tベル研で Doug McIlroyが Unixを使ってテキストの処理をしていた

使っていたのは ed(1)

ポイント: テキストを全部メモリに読み込む

検索を多用しているうちにメモリ不足に

Dennis Ritchie に「edから検索機能を取り出してほしい」と依頼

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 9 / 40

Page 10: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

Ritchieがコマンドを作り grepと名付けられるedのコマンド g/re/pから

grepの使い方標準入力からテキストを読んで検索条件にマッチしたものを標準出力へ

現在と全く同じ

McIlroyは grepに大変満足メモリの消費を気にしなくてよい

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 10 / 40

Page 11: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

edの検索機能と grepの違い

grepはメモリをほとんど食わないテキストを 1行 1行読んでは捨てればよい

パイプとの親和性cat | grep | sedのように多段につなげるパイプもMcIlroyが grep以前に発案していた

UNIXの新規性を語る上で最も重要なものの一つ

grepのような標準入出力を使うコマンドは、フィルタコマンドと呼ばれた

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 11 / 40

Page 12: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

他のコマンドの誘発

パイプと grepの効果から他のコマンドが次々誕生sed(1): edの置換機能awk(1): 検索+演算yacc(1), lex(1): コマンドを作るためのコマンド

他、現在「GNU core utilities」に含まれているコマンドが続々と作られる

コマンドとパイプ(とファイルへのリダイレクト)で、テキスト処理のためのフレームワークを形成

ソフトウェアツール

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 12 / 40

Page 13: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

grepのエピソードまとめ

Unixはもともと文章処理システムのためのOS

McIlroyと Unix開発メンバーによるパイプとソフトウェアツールの発明と実現

フィルタコマンドは一方通行に入出力を行い、必要以上のメモリを消費しない

ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 13 / 40

Page 14: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

sed, AWK

Unix黎明期の重要なコマンドsed: edの文字列置換機能から派生grep: grepの拡張

単機能とは言えないが · · ·他のコマンドでできないような複雑な処理が可能UNIX系 OS初心者向け

コマンドをたくさん知らなくてもツブシが利く

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 14 / 40

Page 15: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

sed

Stream EDitor標準入出力を使って字を加工使ってみましょう

.

.

. ..

.

.

###「え」を「お」に変換###

uedambp:~ ueda$ echo あいうえお | sed ’s/え/お/g’

あいうおお###範囲を指定して置換###

uedambp:~ ueda$ seq 1 5 | sed ’2,4s/./a/g’

1

a

a

a

5

###指定した範囲を抽出###

uedambp:~ ueda$ seq 1 5 | sed -n ’3,$p’

3

4

5

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 15 / 40

Page 16: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

.

.

. ..

.

.

###文章の折り返し###

###Macだと gsedをインストール(brew install gnu-sed)uedambp:~ ueda$ echo です。ます。でした。 | gsed ’s/。/&\n/g’

です。ます。でした。

###逆の操作は trを使いましょう###

uedambp:~ ueda$ echo です。ます。でした。 |

gsed ’s/。/&\n/g’ | tr -d ’\n’

です。ます。でした。uedambp:~ ueda$

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 16 / 40

Page 17: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

AWK

作者 Aho, Weinberger, Kernighanの頭文字で AWK

grepの拡張数字や文字列の比較で行を抽出抽出した行に対する操作プログラミング言語化

使ってみましょう

.

.

. ..

.

.

###grepと同じ操作###

uedambp:~ ueda$ seq 1 10 | awk ’/1/’

1

10

uedambp:~ ueda$ seq 1 10 | awk ’/[240]/’

2

4

10

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 17 / 40

Page 18: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

.

.

. ..

.

.

###演算###

uedambp:~ ueda$ echo 4.2 1.1 | awk ’{print $1*$2}’

4.62

uedambp:~ ueda$ echo {1..10} | awk ’{print $2+$5}’

7

###抽出して計算###

uedambp:~ ueda$ seq 1 10 | awk ’/[240]/{print $1*2}’

4

8

20

###抽出して加工###

uedambp:~ ueda$ seq 1 10 | awk ’/[240]/{print $1 "円"}’

2円4円10円###集計###

uedambp:~ ueda$ echo {1..10} |

awk ’{for(i=1;i<=NF;i++){a+=$i};print a}’

55

uedambp:~ ueda$ seq 1 10 | awk ’{a+=$1}END{print a}’

55

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 18 / 40

Page 19: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

.

.

. ..

.

.

###キーごとに集計###

uedambp:~ ueda$ cat input <-こういうファイルを作りましょうa 1

b 3

a 4

b 2

c 1

uedambp:~ ueda$ cat input |

awk ’{x[$1]+=$2}END{for(k in x){print k,x[k]}}’

a 5

b 5

c 1

###制御構文はしんどいのでこういうコマンドがある(Open usp Tukubai)###uedambp:~ ueda$ sort input | sm2 1 1 2 2

a 5

b 5

c 1

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 19 / 40

Page 20: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

.

.

. ..

.

.

###パターンを複数個使う###

uedambp:~ ueda$ cat input |

awk ’$2>=3{print $1,"合格"}$2<3{print $1,"不合格"}’

a 不合格b 合格a 合格b 不合格c 不合格

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 20 / 40

Page 21: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

まとめ

コマンドには、OSをいじるためのものだけではなくテキスト処理のものがある

コマンドは標準入出力を利用することでメモリを食わない

sed, AWKでできること置換、検索、集計、字の加工

ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 21 / 40

Page 22: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

前半戦(簡単な問題・基礎操作)

全 4問簡単と言っておいて簡単であった試しはない

解答はMacで作りましたMacの方は brew install coreutilsをLinux、他の OSでのやり方も適宜解説

.主なコマンド名の違い..

.

. ..

.

.

Mac, BSD系 Linux

gdate dategsed sedgawk awktail -r tacgtr trgfold fold

前半戦(簡単な問題・基礎操作) June 14, 2014 22 / 40

Page 23: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 1

次の echoの出力を、echoにパイプをつなげて足し算してください。

.

.

. ..

.

.

uedambp:INPUT␣ueda$␣echo␣-12,135,123␣135,123

-12,135,123␣135,123

前半戦(簡単な問題・基礎操作) June 14, 2014 23 / 40

Page 24: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ echo -12,135,123 135,123 |

sed ’s/,//g’ | awk ’{print $1+$2}’

-12000000

uedambp:INPUT ueda$ echo -12,135,123 135,123 |

tr -d , | awk ’{print $1+$2}’

-12000000

uedambp:INPUT ueda$ echo -12,135,123 135,123 |

sed ’s/,//g’ | sed ’s/ /+/’ | bc

-12000000

前半戦(簡単な問題・基礎操作) June 14, 2014 24 / 40

Page 25: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 2

次のメモについて、各レコードが「名前 点数」の順になるようにデータを整形しましょう。

.

.

. ..

.

.

uedambp:INPUT ueda$ cat score

45 鎌田濱田 72

今泉 84

24 上田94 斉藤

前半戦(簡単な問題・基礎操作) June 14, 2014 25 / 40

Page 26: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat score |

awk ’/^[0-9]/{print $2,$1}/^[^0-9]/{print}’

鎌田 45

濱田 72

今泉 84

上田 24

斉藤 94

###別解###

uedambp:INPUT ueda$ cat score |

awk ’/ [0-9]/{print}/^[0-9]/{print $2,$1}’

uedambp:INPUT ueda$ sed ’s/\([0-9][0-9]*\) \(..*\)/\2 \1/’ score

前半戦(簡単な問題・基礎操作) June 14, 2014 26 / 40

Page 27: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 3

m/sに直してください。1マイル = 1.609km で演算を

.

.

. ..

.

.

uedambp:INPUT ueda$ cat speed

100km/h

16mph

前半戦(簡単な問題・基礎操作) June 14, 2014 27 / 40

Page 28: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat speed | sed ’s/[a-z]/ &/’ |

awk ’$2=="km/h"{print $1,1000.0/3600.0}

$2=="mph"{print $1,1609.0/3600.0}’ | awk ’{print $1*$2}’

27.7778

7.1511

uedambp:INPUT ueda$ cat speed | sed ’s;km/h; 1000 3600;’ |

sed ’s;mph; 1609 3600;’ | awk ’{print $1*$2/$3}’

27.7778

7.15111

前半戦(簡単な問題・基礎操作) June 14, 2014 28 / 40

Page 29: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 4

さいとうさん、さわださん、ひろたさん、いとうさんの数を数えてください。

.

.

. ..

.

.

uedambp:INPUT ueda$ cat name

斎藤 斉藤 沢田 澤田 伊藤齋藤 齊藤 広田 廣田

前半戦(簡単な問題・基礎操作) June 14, 2014 29 / 40

Page 30: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat name | xargs -n 1 |

sed ’s/^[齊斉斎齋]/さい/’ | sed ’s/[沢澤]/さわ/’ |

sed ’s/[広廣]/ひろ/’ |

awk ’{a[$1]++}END{for(k in a){print k,a[k]}}’

さわ田 2

伊藤 1

ひろ田 2

さい藤 4

uedambp:INPUT ueda$ cat name | xargs -n 1 |

sed ’s/^[齊斉斎齋]/さい/’ | sed ’s/[沢澤]/さわ/’ |

sed ’s/[広廣]/ひろ/’ | sort | uniq -c

1 伊藤4 さい藤2 さわ田2 ひろ田

前半戦(簡単な問題・基礎操作) June 14, 2014 30 / 40

Page 31: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

後半戦(応用、パズル)

初心者の方は上級者が苦しむ様子をお楽しみください。

後半戦(応用、パズル) June 14, 2014 31 / 40

Page 32: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 5

次の CSVに書いてある数字を足し算してください。

.

.

. ..

.

.

uedambp:INPUT ueda$ cat csv

1,2,"123,456",-5,"-123,444"

6,7,8,"12",9

後半戦(応用、パズル) June 14, 2014 32 / 40

Page 33: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat csv | sed ’s/,\([0-9][0-9]*\)"/\1/g’ |

gsed ’s/[,"]/\n/g’ | awk ’{a+=$1}END{print a}’

52

uedambp:INPUT ueda$ cat csv | gsed ’s/"[^"]*"/\n&\n/g’ |

awk ’!/^"/{gsub(/,/,"\n",$0);print}

/^"/{gsub(/[",]/,"",$0);print}’ |

awk ’{a+=$1}END{print a}’

52

uedambp:INPUT ueda$ cat csv | sed ’s/,/ /g’ |

sed ’s/\("[-0-9][0-9]*\) /\1/g’ | sed ’s/"//g’ | xargs -n 1 |

awk ’{a+=$1}END{print a}’

52

uedambp:INPUT ueda$ cat csv | sed ’s/,/ /g’ |

sed ’s/ \([0-9][0-9]*"\)/\1/g’ | tr -d ’"’ | xargs |

awk ’{for(i=1;i<=NF;i++){a+=$i};print a}’

52

後半戦(応用、パズル) June 14, 2014 33 / 40

Page 34: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 6

次のデータを行列として転置してください。

.

.

. ..

.

.

uedambp:INPUT ueda$ cat matrix

a b c

d e f

g h i

###出力###

uedambp:INPUT ueda$ ???

a d g

b e h

c f i

後半戦(応用、パズル) June 14, 2014 34 / 40

Page 35: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat matrix |

awk ’{for(i=1;i<=3;i++){print i,NR,$i}}’ | sort |

awk ’NR%3==0{print $3}NR%3!=0{printf $3 " "}’

a d g

b e h

c f i

###別解###

uedambp:INPUT ueda$ cat matrix |

awk ’{for(i=1;i<=3;i++){print i,$i}}’ |

sort | awk ’{print $2}’ | xargs -n 3

uedambp:INPUT ueda$ cat matrix |

gsed ’s/\(.\) \(.\) \(.\)/1 \1\n2 \2\n3 \3/’ |

sort | sed ’s/.* //’ | xargs -n 3

uedambp:INPUT ueda$ cat matrix |

awk ’{for(i=1;i<=3;i++){x[NR,i]=$i}}

END{for(i=1;i<=3;i++){

for(j=1;j<=3;j++){printf("%s ",x[j,i])}print ""}};’

後半戦(応用、パズル) June 14, 2014 35 / 40

Page 36: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 7

次の IPv6の IPアドレスから、省略された 0を復元してください。

4桁の頭のゼロは省略できる

.

.

. ..

.

.

uedambp:INPUT ueda$ echo 2001:db8:20:3:1000:100:20:3

2001:db8:20:3:1000:100:20:3

後半戦(応用、パズル) June 14, 2014 36 / 40

Page 37: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ echo 2001:db8:20:3:1000:100:20:3 |

tr : ’\n’ | sed ’s/^/000/’ | sed ’s/0*\(....\)$/\1/’ |

xargs | tr ’ ’ :

2001:0db8:0020:0003:1000:0100:0020:0003

後半戦(応用、パズル) June 14, 2014 37 / 40

Page 38: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

問題 8

次の IPv6の IPアドレスから、省略された 0を復元してください。

4桁の頭のゼロは省略できる1回だけ、:0000:0000:と 0000

が続くところは:: と省略できる。

.

.

. ..

.

.

uedambp:INPUT ueda$ cat ipv6

2001:db8::1234:0:0:9abc

2001:db8:20:3:1000:100:20:3

2001:db8::9abc

後半戦(応用、パズル) June 14, 2014 38 / 40

Page 39: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

解答

.

.

. ..

.

.

uedambp:INPUT ueda$ cat ipv6 | sed ’s/::/:x:/g’ | tr : ’ ’ |

awk ’{for(i=1;i<=NF;i++){print NR,8-NF,$i}}’ |

awk ’/x/{for(i=0;i<=$2;i++){print}}!/x/{print}’ | tr x 0 |

awk ’{print "000"$3}’ | sed ’s/0*\(....\)$/ \1/’ | xargs -n 8 | tr ’ ’ :

2001:0db8:0000:0000:1234:0000:0000:9abc

2001:0db8:0020:0003:1000:0100:0020:0003

2001:0db8:0000:0000:0000:0000:0000:9abc

uedambp:INPUT ueda$ cat ipv6 | sed ’s/::/:x:/g’ | tr : ’ ’ |

awk ’{print 8-NF,$0}’ |

awk ’{for(i=1;i<=$1;i++){sub(/x/,"x x",$0)};print}’ |

sed ’s/^..//’ | sed ’s/x/0/g’ | sed ’s/ / 000/g’ |

sed ’s/^/000/’ | sed ’s/\([^ ]*\)\(....\) /\2:/g’ |

sed ’s/\([^:]*\)\(....\)$/\2/g’

2001:0db8:0000:0000:1234:0000:0000:9abc

2001:0db8:0020:0003:1000:0100:0020:0003

2001:0db8:0000:0000:0000:0000:0000:9abc

後半戦(応用、パズル) June 14, 2014 39 / 40

Page 40: jus & USP友の会共催 シェルワンライナー勉強会@関西(第11回シェル芸勉強会)

. . . . . .

タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)

おわりに

おつかれさまでした!

少しずつ無理せず端末でできることを増やしていきましょう

後半戦(応用、パズル) June 14, 2014 40 / 40