jus & USP友の会共催...
-
Upload
ryuichi-ueda -
Category
Science
-
view
5.145 -
download
4
description
Transcript of jus & USP友の会共催...
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
.
.
. ..
.
.
シェルワンライナー勉強会@関西(第 11回シェル芸勉強会)
主催: 日本 UNIXユーザ会 & USP友の会
会場: ECCコンピュータ専門学校
上田隆一
USP 友の会/産業技術大学院大学
June 14, 2014
June 14, 2014 1 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
自己紹介
上田隆一(36)USP友の会会長産業技術大学院大学助教USP研究所アドバイザリーフェロー
仕事ロボットの研究コンピュータ関連のなにかいろいろ
自己紹介 June 14, 2014 3 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
最近の話題: 本が出ます!フルスクラッチから 1日で CMSを作るシェルスクリプト高速開発手法入門
CMSといってもマイクロな CMSですが、「シェルスクリプトで CGI」というお題を真面目に扱ってます7/1発売予定 .. Link
もう一冊書いていて今月末閉め切り死亡こちらは完全にシェル芸の本
自己紹介 June 14, 2014 4 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
シェル芸勉強会とは
コマンドをつなげるタイプのワンライナーを体得する会もう 11回目
何がうれしいか?表計算ソフトやエディタでチマチマやっていた作業が瞬殺できる機会が増加
CLI(command line interface)に親しむ余計な情報がなく高度に抽象化された世界で仕事わけのわからん GUIソフトで OSが不安定になる機会激減
プログラマとしての訓練結局俺ら何やってんだ?→データの加工
自己紹介 June 14, 2014 5 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
14:05-14:30: ソフトウェアツールと AWK・sedについて
ソフトウェアツールと AWK・sed について June 14, 2014 6 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
コマンド
端末からプログラムを立ち上げるときに使う文字列あるいはプログラムそのもの
UNIX系では最初からインストールされている何のため?
システムを操作するためのものiptables, service, reboot, shutdown, ...
それ以外grep, echo, cat, seq, ...
本日は「それ以外」のコマンドの話何のためにあるの?何で標準で入っているの?
ソフトウェアツールと AWK・sed について コマンド・ソフトウェアツール June 14, 2014 7 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
grepの誕生
Unixは(名目上)特許のドキュメント管理システムとして開発された
AT&Tベル研で Doug McIlroyが Unixを使ってテキストの処理をしていた
使っていたのは ed(1)
ポイント: テキストを全部メモリに読み込む
検索を多用しているうちにメモリ不足に
Dennis Ritchie に「edから検索機能を取り出してほしい」と依頼
ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 9 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
Ritchieがコマンドを作り grepと名付けられるedのコマンド g/re/pから
grepの使い方標準入力からテキストを読んで検索条件にマッチしたものを標準出力へ
現在と全く同じ
McIlroyは grepに大変満足メモリの消費を気にしなくてよい
ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 10 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
edの検索機能と grepの違い
grepはメモリをほとんど食わないテキストを 1行 1行読んでは捨てればよい
パイプとの親和性cat | grep | sedのように多段につなげるパイプもMcIlroyが grep以前に発案していた
UNIXの新規性を語る上で最も重要なものの一つ
grepのような標準入出力を使うコマンドは、フィルタコマンドと呼ばれた
ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 11 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
他のコマンドの誘発
パイプと grepの効果から他のコマンドが次々誕生sed(1): edの置換機能awk(1): 検索+演算yacc(1), lex(1): コマンドを作るためのコマンド
他、現在「GNU core utilities」に含まれているコマンドが続々と作られる
コマンドとパイプ(とファイルへのリダイレクト)で、テキスト処理のためのフレームワークを形成
ソフトウェアツール
ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 12 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
grepのエピソードまとめ
Unixはもともと文章処理システムのためのOS
McIlroyと Unix開発メンバーによるパイプとソフトウェアツールの発明と実現
フィルタコマンドは一方通行に入出力を行い、必要以上のメモリを消費しない
ソフトウェアツールと AWK・sed について コマンドの由来 June 14, 2014 13 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
sed, AWK
Unix黎明期の重要なコマンドsed: edの文字列置換機能から派生grep: grepの拡張
単機能とは言えないが · · ·他のコマンドでできないような複雑な処理が可能UNIX系 OS初心者向け
コマンドをたくさん知らなくてもツブシが利く
ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 14 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
まとめ
コマンドには、OSをいじるためのものだけではなくテキスト処理のものがある
コマンドは標準入出力を利用することでメモリを食わない
sed, AWKでできること置換、検索、集計、字の加工
ソフトウェアツールと AWK・sed について sed, AWK June 14, 2014 21 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
問題 1
次の echoの出力を、echoにパイプをつなげて足し算してください。
.
.
. ..
.
.
uedambp:INPUT␣ueda$␣echo␣-12,135,123␣135,123
-12,135,123␣135,123
前半戦(簡単な問題・基礎操作) June 14, 2014 23 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
問題 2
次のメモについて、各レコードが「名前 点数」の順になるようにデータを整形しましょう。
.
.
. ..
.
.
uedambp:INPUT ueda$ cat score
45 鎌田濱田 72
今泉 84
24 上田94 斉藤
前半戦(簡単な問題・基礎操作) June 14, 2014 25 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
問題 3
m/sに直してください。1マイル = 1.609km で演算を
.
.
. ..
.
.
uedambp:INPUT ueda$ cat speed
100km/h
16mph
前半戦(簡単な問題・基礎操作) June 14, 2014 27 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
問題 4
さいとうさん、さわださん、ひろたさん、いとうさんの数を数えてください。
.
.
. ..
.
.
uedambp:INPUT ueda$ cat name
斎藤 斉藤 沢田 澤田 伊藤齋藤 齊藤 広田 廣田
前半戦(簡単な問題・基礎操作) June 14, 2014 29 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
後半戦(応用、パズル)
初心者の方は上級者が苦しむ様子をお楽しみください。
後半戦(応用、パズル) June 14, 2014 31 / 40
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと 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
. . . . . .
タイムテーブル 自己紹介. . . . . . . . . . . . . . .ソフトウェアツールと AWK・sed について 前半戦(簡単な問題・基礎操作) 後半戦(応用、パズル)
おわりに
おつかれさまでした!
少しずつ無理せず端末でできることを増やしていきましょう
後半戦(応用、パズル) June 14, 2014 40 / 40