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

11,794 views

Published on

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

Published in: Science

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

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

×