SlideShare a Scribd company logo
「シェルスクリプト VS AWK」
   どっちが強い!?
  プログラミングバトル
日本 gnu awk ユーザー会 斉藤博文
     USP友の会 上田隆一
この発表
• awk と シェルスクリプト(bash) の対決
  – どっちが強い?(小学生風)
  – 同じお題をawkとシェルスクリプトで書く
     • スクリプトの華麗さを競う
  – 対決者
     • awk: 斉藤博文(日本 gnu awk ユーザー会)
        – @hi_saito
     • シェルスクリプト: 上田隆一(USP友の会)
        – @usptomo, @ryuichiueda


2011年11月19日       OSC2011 Tokyo Fall   2
awk
• 1977 年にできたスクリプト言語
  – GNU awk は 1985 年
• UNIX の創造者の英知の集合
  – Alfred Aho
  – Peter Weinberger
  – Brian Kernighan
• 実は awk は高速
  – nawk << Ruby, Perl < gawk << mawk << C

2011年11月19日   OSC2011 Tokyo Fall   3
bashスクリプト
• シェルスクリプト
  – 手で端末に打つコマンドをファイルに書くだけ
• bash
  – Linux標準、使ったこと無い人はいないはず


• コマンド使い放題
  – 超高級プログラミング言語としての側面
    • 処理の大半はコマンドに任せる
    • bashを端末を叩く人はみんなプログラマ
                                        アイコン?マスコット?
                                          んなもん無い。
 2011年11月19日   OSC2011 Tokyo Fall   4
本日のお題
• Round 1 小技: apache logさばき
• Round 2 中技: CGIで何かアピール
• Round 3 フリー演技




2011年11月19日   OSC2011 Tokyo Fall   5
1回の表           (ノーアウト)

 Apache のログ解析の極意

      FS にダブルクォート (") を使え!


• ダブルクォートを FS にすると・・・
  – $1:アクセス元、日付                     ほとんどの
  – $2: 受け取ったコマンド                   解析が便利に
  – $3: ステータスコード                    なるよ!
  – $6: クライアント情報
2011年11月19日    OSC2011 Tokyo Fall      6
1回の表             (1 アウト)

 ログ解析の極意

              awk だけに頼るな!

御題

  最も多く 404 を返しているサイトを探せ!

• awk だけで書こうとすると結構大変かも。
• shell のパイプで繋げるとデバッグもしやすいね。
2011年11月19日    OSC2011 Tokyo Fall        7
1回の表               (2 アウト)
#! /bin/gawk -f
BEGIN {
    FS = """;
}
$3 ~ / 404 / {
    split($1, arr, / /);
    count[arr[1]]++;
}
END {
    for (a in count) {
        stat_arr[i++] = sprintf("%010s", count[a]) " " a;
    }
    num = asort(stat_arr);
    split(stat_arr[num], url, / /);
    print url[2];
}

awk だけでできるけど、直感的じゃないよね。
 2011年11月19日        OSC2011 Tokyo Fall        8
1回の表            (2 アウト)

$ cat access_log | 
  awk -F '"' '$3 ~ / 404 /' | 
  awk '$0 = $1' | 
  sort | 
  uniq -c | 
  sort -nr | 
  awk 'NR == 1 && $0 = $2'

127.0.0.1 # オレかよ!!

分かりやすいし、途中結果も確認しやすいね。

 2011年11月19日   OSC2011 Tokyo Fall        9
1回の表            (2 アウト)

  バッファに溜まって出力されない?

 system() は fflush() することをうまく使え!

  御題

リアルタイムで IP アドレスからホスト名を引け!

$ tail -f access_log |
  awk '{system ("dig -x" $1 " +short")}'

 2011年11月19日   OSC2011 Tokyo Fall        10
1回の裏
• シェルスクリプトでのログ処理
  – データを正規化しておくと以後の処理が簡単に
   000003795 1 114.182.31.102
   000003795 2 -
   000003795 3 -
   000003795 4 20111106 162032
   000003795 5 GET /usage/ctry_usage_201110.png HTTP/1.1
   000003795 6 200
   000003795 7 4168
   000003795 8 http://www.araibo.com/usage/usage_201110.html
   000003795 9 Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1
   000003796 1 66.249.66.18
   000003796 2 -
   000003796 3 -
   000003796 4 20111106 164022
   000003796 5 GET /paper/ARAIBO_TechnicalReport2006.pdf HTTP/1.1
   000003796 6 200
   000003796 7 1801153
   000003796 8 -
   000003796 9 Googlebot/2.1 (+http://www.google.com/bot.html)
2011年11月19日                 OSC2011 Tokyo Fall                        11
1回の裏
  • 正規化スクリプト
     – ...結構awk依存
#!/bin/bash -vx
dir=/var/www/html/OSC
tmp=/tmp/$$

cat $dir/LOG/httpd/access_{log.*,log}                  |
sed -e 's/(..*) (..*) (..*) [(..*)] "(..*)" (..*)
(..*) "(..*)" "(..*)"$/1ダァシェリイェス2ダァシェリイェス3ダァシェリイェス4ダァ
シェリイェス5ダァシェリイェス6ダァシェリイェス7ダァシェリイェス8ダァシェリイェス9/'           |
awk -F"ダァシェリイェス" '{c=1;for(i=1;i<=NF;i++){print NR,c++,$i}}' |
awk '{$1=sprintf("%09s",$1);print}'              > $tmp-data

awk '$2==4' $tmp-data | tr '/:' ' '           |
awk '{print $4,$0}' |sed -f $dir/SYS/MONTH    |
awk '{print $2,$3,$6$1$4,$7$8$9}'| sort -ms -k1,2 - $tmp-data |
awk '$2!=4 || $3!~/:/'    > $dir/LOG/ACCESS_LOG
   2011年11月19日        OSC2011 Tokyo Fall       12
1回の裏
• 続きは端末で
  – 404エラーを出したIP
    • $ cat ../LOG/ACCESS_LOG | awk '$2==1 || $2==6 ' | awk
      '{if($2==1){printf("%s ",$0)}else{print}}' | grep "404$" | awk '{print
      $3}' | sort | uniq -c | awk '{print $2,$1}' | sort -k2,2n
  – 閲覧された回数
    • $ awk '$2==5' ../LOG/ACCESS_LOG | awk '{print $4}' | sort | uniq
      -c | egrep "cgi|php|htm|html" | awk '{print $2,$1}' | sort -k2,2n


            ※難しいでしょうか??
            いや、出力見ながらパイプをつなげていくだけなので、
            案外簡単です。
2011年11月19日     OSC2011 Tokyo Fall 13
2回の表           (ノーアウト)

 awk で CGI を作る時の極意

         GET と POST を意識せよ!




最近の LL だと GET と POST を意識しなければ
いけないのはオワコンかもしれないけど、知って損
なし。

2011年11月19日    OSC2011 Tokyo Fall      14
2回の表           (1 アウト)

 御題

          日々の体重を記録せよ!


• 体重を入力すると、グラフにしていってくれる。
• スマートフォンでアプリ化するほどのものでも
  ないよね。


2011年11月19日   OSC2011 Tokyo Fall       15
2回の表            (1 アウト)

 グラフの極意

              Gnuplot を使いこなせ!


• 手軽                                 munin とか
• テキストベースで扱える                        Webalizer の
• 出力の種類が多い                           ようなものも
                                     作れる!

2011年11月19日     OSC2011 Tokyo Fall       16
2回の表           (2 アウト)

<html>
<head>
<title>AWK の CGI サンプル</title>
</head>
<body>
<form method="GET" action="graph.cgi">
<input type="text" value="60" name="weight">
<input type="submit" value="get"
name="submit">
</form>
</body>
</html>

これは普通の HTML です。
 2011年11月19日   OSC2011 Tokyo Fall       17
2回の表             (2 アウト)
#! /bin/gawk -f
## graph.cgi
BEGIN {
    data_file = "data.txt";
    ORS = "rn";
    split(ENVIRON["QUERY_STRING"], arr_query, "&");
    for (i in arr_query) {
        split(arr_query[i], arr_query_val, "=");
        query_name        = arr_query_val[1];
        query_str         = arr_query_val[2];
        query[query_name] = query_str;
    }


GET なので環境変数からデータを格納する。
 2011年11月19日      OSC2011 Tokyo Fall       18
2回の表             (2 アウト)
 now = strftime("%Y/%m/%d-%H:%M");
    printf("%s %sn", now, query["weight"])>>data_file;
    close(data_file);
    print "
set xdata timen
set timefmt '%Y/%m/%d-%H:%M:%S'n
set terminal pngn
set yrange [0:100]n
set xlabel 'Date'n
set ylabel 'Weight (Kg)'n
set output 'graph.png'n
plot '" data_file "' using 1:2 title 'Weight' with
linesn
quitn
" | "gnuplot > /dev/null";

データを格納し、Gnuplot でグラフを描く。
 2011年11月19日      OSC2011 Tokyo Fall       19
2回の表              (2 アウト)           は
                                                  細 に
                                                 詳 ス
  print "Content-Type: text/html";               ブ ーGo!
     print "";
     print "
<html>
<head>
<title>体重のグラフ</title>
</head>
<body>
<img src='graph.png'>
</body>
</html>
";
}


HTML を出力し、画面にグラフを表示する。
 2011年11月19日       OSC2011 Tokyo Fall       20
2回の裏
• テキストの表をブラウザに出力してみる。
  – コマンドにしてみました。

   html_tableコマンド

   #!/bin/bash
   echo '<table cellspacing="0" border="1">'
   sed     -e 's;^;t<tr>ntt<td>;'
           -e 's;$;</td>nt</tr>;'
           -e 's; ;</td>ntt<td>;g' < /dev/stdin
   echo '</table>'


2011年11月19日         OSC2011 Tokyo Fall   21
2回の裏
• すごく頑丈なアクセスカウンタを作ってきました。
   #!/bin/bash -vx
   dir=/home/usp/ACCESS_COUNTER
   echo -n 1 >> $dir/POMPA/COUNTER
   echo "Content-type: text/htmln"
   ls -l $dir/POMPA/COUNTER | awk '{print $5}'
   exit 0

  – HTTP出力込みでわずか6行
  – 原理
    • アクセスがあるとカウンタファイルを1バイト増やす
    • lsでカウンタファイルの容量を調べて出力
    • 排他処理なんてイラネエ。あ、awkを使ってもうた。


2011年11月19日      OSC2011 Tokyo Fall    22
2回の裏
• ドリルダウン機能つきの表(USP研究所のデモから)
  – bashで書いたCGIスクリプト
     • ユーザの操作履歴をPOSTで受ける
     • 操作履歴から表示するレコード、開閉ボタンを準備
     • htmlのテンプレートに貼り付けて出力




                                   もっと派手なものが
                                   見たければブースへ!!
2011年11月19日   OSC2011 Tokyo Fall     23
3回の表               (そして伝説へ・・・)

  gawk で @include する極意!

      igawk は 100 % shell なので注意!

eval gawk $opts -- '"$processed_program"' '"$@"'


• 中間ファイルを作成しないように、直接ソースを gawk に食わせている
  ため、巨大なスクリプトを実行するとエラーになる。orz
 – comp.lang.awk の FAQ ・・・




 2011年11月19日          OSC2011 Tokyo Fall   24
3回の表             (そして伝説へ・・・)

  電卓を作る極意!

             好きな言語で記述せよ!


calc() {awk "BEGIN {print $*}"}

• これ、マジ便利です!
• Perl, Ruby, Python, etc. 自分の好きな言語でどうぞ!




 2011年11月19日       OSC2011 Tokyo Fall      25
3回の表           (そして伝説へ・・・)

  shell を作る極意!

               100 % ネタです!


awk '{system($0)}'




 2011年11月19日   OSC2011 Tokyo Fall   26
3回の表            (そして伝説へ・・・)        は
                                              細 に
                                             詳 ス
                                             ブ ーGo!
    ppencode の極意!

     length() は length でエラーにならない! 

0   :   length
1   :   cos(length)
2   :   int(exp(cos(length)))
3   :   ...

• length が引数なしでエラーにならないのはバグとして報告されている
  ので、いつか使えなくなるかも?


    2011年11月19日    OSC2011 Tokyo Fall   27
3回の表           (そして伝説へ・・・)                 は
                                                  細 に
                                                 詳 ス
                                                 ブ ーGo!
CMS を作る極意!

              根気と気合です!

                                全て awk で記述された Blis を改良
                            •
                                し、RSS も生成するようにしてある。




2011年11月19日   OSC2011 Tokyo Fall           28
3回の表           (そして伝説へ・・・)        は
                                         細 に
                                        詳 ス
                                        ブ ーGo!
ImageMagick を扱う極意!

       文字コードを UTF-8 に揃えよ!


                   • UTF-8 ならコマンドラインから文字
                     列を指定して、年賀状とか書けちゃう
                     よ。




2011年11月19日   OSC2011 Tokyo Fall   29
3回裏(伝説なのか?)
• 他の言語を使う。
  – PYTHON.sh, C.sh, RUBY.sh, ...
#!/bin/bash
# エクセルシートのB列の値を足す。
ruby << FIN | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}'
require 'rubygems'
require 'spreadsheet'
book = Spreadsheet.open './hoge.xls'
sheet = book.worksheet 0
for i in 0..3
        print sheet[i,1]
        print "n"
end
FIN


2011年11月19日       OSC2011 Tokyo Fall       30
3回裏(伝説なのか?)
• webから数値参照で書かれた文字列を
  取ってくる。
       #!/bin/bash

       curl $1                  |
       grep '&#'                |
       w3m -dump -T text/html




2011年11月19日      OSC2011 Tokyo Fall   31
3回裏(伝説なのか?)
• クローラを作ってきました。
#!/bin/bash -vx
mkdir -p ./cache
cd ./cache
echo 'http://www.google.co.jp/' > ./url.1
for i in 2 3 4 ; do
        cat ./url.$(( $i - 1 )) | wget -i -
        cat ./*                                    |
        sed -e 's|href="([^"][^"]*)"|n1n|g'   |
        grep ^http                                 |
        sort                                       |
        uniq                     
> ./url.$i
done

exit 0
2011年11月19日        OSC2011 Tokyo Fall       32
3回裏(伝説なのか?)
• ブースにて、bashで書かれたシステムを
  お見せします。




2011年11月19日     OSC2011 Tokyo Fall   33
まとめ
• awkなしでシェルスクリプトを書くのは大変だね
• シェルスクリプトと awk で世界が広がるよ
  – ということで友好団体になりました。


• 質問はブースへ
  – 隣同士にいます。



2011年11月19日   OSC2011 Tokyo Fall   34

More Related Content

What's hot

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
Yuichiro MInato
 
Reinforcement Learning(方策改善定理)
Reinforcement Learning(方策改善定理)Reinforcement Learning(方策改善定理)
Reinforcement Learning(方策改善定理)
Masanori Yamada
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
paiza
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
uchan_nos
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
sonickun
 
時系列データと確率的プログラミング tfp.sts
時系列データと確率的プログラミング tfp.sts時系列データと確率的プログラミング tfp.sts
時系列データと確率的プログラミング tfp.sts
Yuta Kashino
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Preferred Networks
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
kazkiti
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
hoxo_m
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
uchan_nos
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
Shota Imai
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法Higashiyama Masahiko
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろうKota Mizushima
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
Eita Sugimoto
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
Gosuke Miyashita
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
Satoshi Hara
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Shintaro Fukushima
 
情報推薦システム入門:講義スライド
情報推薦システム入門:講義スライド情報推薦システム入門:講義スライド
情報推薦システム入門:講義スライド
Kenta Oku
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみた
Yoshihiko Shiraki
 

What's hot (20)

最適化計算の概要まとめ
最適化計算の概要まとめ最適化計算の概要まとめ
最適化計算の概要まとめ
 
Reinforcement Learning(方策改善定理)
Reinforcement Learning(方策改善定理)Reinforcement Learning(方策改善定理)
Reinforcement Learning(方策改善定理)
 
paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺paizaのオンラインジャッジを支えるDockerとその周辺
paizaのオンラインジャッジを支えるDockerとその周辺
 
C++でできる!OS自作入門
C++でできる!OS自作入門C++でできる!OS自作入門
C++でできる!OS自作入門
 
RSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjpRSA暗号運用でやってはいけない n のこと #ssmjp
RSA暗号運用でやってはいけない n のこと #ssmjp
 
時系列データと確率的プログラミング tfp.sts
時系列データと確率的プログラミング tfp.sts時系列データと確率的プログラミング tfp.sts
時系列データと確率的プログラミング tfp.sts
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法初心者向けCTFのWeb分野の強化法
初心者向けCTFのWeb分野の強化法
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
はりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみたはりぼて OS で ELF なアプリを起動してみた
はりぼて OS で ELF なアプリを起動してみた
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 
ダブル配列の実装方法
ダブル配列の実装方法ダブル配列の実装方法
ダブル配列の実装方法
 
メタプログラミングって何だろう
メタプログラミングって何だろうメタプログラミングって何だろう
メタプログラミングって何だろう
 
ラムダ計算入門
ラムダ計算入門ラムダ計算入門
ラムダ計算入門
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)機械学習モデルの判断根拠の説明(Ver.2)
機械学習モデルの判断根拠の説明(Ver.2)
 
Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)Rにおける大規模データ解析(第10回TokyoWebMining)
Rにおける大規模データ解析(第10回TokyoWebMining)
 
情報推薦システム入門:講義スライド
情報推薦システム入門:講義スライド情報推薦システム入門:講義スライド
情報推薦システム入門:講義スライド
 
fastTextの実装を見てみた
fastTextの実装を見てみたfastTextの実装を見てみた
fastTextの実装を見てみた
 

Viewers also liked

日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall博文 斉藤
 
第31回WebSig会議【セッション2】 タブレットが与える影響について考える
第31回WebSig会議【セッション2】 タブレットが与える影響について考える第31回WebSig会議【セッション2】 タブレットが与える影響について考える
第31回WebSig会議【セッション2】 タブレットが与える影響について考える
Hideto Ishibashi
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)umidori
 
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
博文 斉藤
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
bsdhack
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践
智之 村上
 
今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門
toilet_lunch
 
機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレストTeppei Baba
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33horihorio
 
一般向けのDeep Learning
一般向けのDeep Learning一般向けのDeep Learning
一般向けのDeep Learning
Preferred Networks
 
トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定
Takashi Kaneda
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木 Miyoshi Yuya
 
SVMについて
SVMについてSVMについて
SVMについて
mknh1122
 
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-Naoki Yanai
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
Koichi Hamada
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tatsuya Tojima
 
Simple perceptron by TJO
Simple perceptron by TJOSimple perceptron by TJO
Simple perceptron by TJOTakashi J OZAKI
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual TalksYuya Unno
 

Viewers also liked (19)

日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 1 - OSC2012 Tokyo/Fall
 
第31回WebSig会議【セッション2】 タブレットが与える影響について考える
第31回WebSig会議【セッション2】 タブレットが与える影響について考える第31回WebSig会議【セッション2】 タブレットが与える影響について考える
第31回WebSig会議【セッション2】 タブレットが与える影響について考える
 
Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)Usp友の会勉強会、ジャクソン構造図の巻(前編)
Usp友の会勉強会、ジャクソン構造図の巻(前編)
 
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
シェルスクリプトワークショップ資料 - 上級者向け「シェル芸」
 
仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト仕事で使えるシェルスクリプト
仕事で使えるシェルスクリプト
 
バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践バンディットアルゴリズム入門と実践
バンディットアルゴリズム入門と実践
 
決定木学習
決定木学習決定木学習
決定木学習
 
今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門今日から使える! みんなのクラスタリング超入門
今日から使える! みんなのクラスタリング超入門
 
機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト機会学習ハッカソン:ランダムフォレスト
機会学習ハッカソン:ランダムフォレスト
 
ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33ロジスティック回帰の考え方・使い方 - TokyoR #33
ロジスティック回帰の考え方・使い方 - TokyoR #33
 
一般向けのDeep Learning
一般向けのDeep Learning一般向けのDeep Learning
一般向けのDeep Learning
 
トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定
 
パターン認識 第10章 決定木
パターン認識 第10章 決定木 パターン認識 第10章 決定木
パターン認識 第10章 決定木
 
SVMについて
SVMについてSVMについて
SVMについて
 
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
 
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
「はじめてでもわかる RandomForest 入門-集団学習による分類・予測 -」 -第7回データマイニング+WEB勉強会@東京
 
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
Tokyo.R 41 サポートベクターマシンで眼鏡っ娘分類システム構築
 
Simple perceptron by TJO
Simple perceptron by TJOSimple perceptron by TJO
Simple perceptron by TJO
 
機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks機械学習チュートリアル@Jubatus Casual Talks
機械学習チュートリアル@Jubatus Casual Talks
 

Similar to awk v.s. bashどっちが強い?@OSC2011Tokyo

Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会
Ryuichi Ueda
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesTakeshi Komiya
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
Masahiro Wakame
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
Akinori Abe
 
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall博文 斉藤
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法博文 斉藤
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
泰 増田
 
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
Hideki Saito
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
akitsukada
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化についてAimingStudy
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
Yoshifumi Yamaguchi
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
y_taka_23
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
Takayuki Shimizukawa
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413博文 斉藤
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
Motohiro KOSAKI
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
Tomohiro Kumagai
 

Similar to awk v.s. bashどっちが強い?@OSC2011Tokyo (20)

Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会Linux女子部第二回勉強会usp友の会
Linux女子部第二回勉強会usp友の会
 
Inside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfesInside of excel 方眼紙撲滅委員会 #pyfes
Inside of excel 方眼紙撲滅委員会 #pyfes
 
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタつくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
 
ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3ng-japan 2015 TypeScript+AngularJS 1.3
ng-japan 2015 TypeScript+AngularJS 1.3
 
OCaml でデータ分析
OCaml でデータ分析OCaml でデータ分析
OCaml でデータ分析
 
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
日本 GNU AWK ユーザー会スライド 2 - OSC2012 Tokyo/Fall
 
GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法GNU awk (gawk) を用いた Apache ログ解析方法
GNU awk (gawk) を用いた Apache ログ解析方法
 
PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門PlaySQLAlchemy: SQLAlchemy入門
PlaySQLAlchemy: SQLAlchemy入門
 
OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編OpenStack Osloを使おう - cliff編
OpenStack Osloを使おう - cliff編
 
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
Gorinphp0729
Gorinphp0729Gorinphp0729
Gorinphp0729
 
C++のビルド高速化について
C++のビルド高速化についてC++のビルド高速化について
C++のビルド高速化について
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
ドキュメンテーションを加速するストレスフリーの作図ツール『blockdiag』 jus2011年6月勉強会
 
USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413USP 友の会 LT 資料 20130413
USP 友の会 LT 資料 20130413
 
Altanative macro
Altanative macroAltanative macro
Altanative macro
 
プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__プロトコル指向に想う世界観 #__swift__
プロトコル指向に想う世界観 #__swift__
 

More from Ryuichi Ueda

第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド
Ryuichi Ueda
 
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノックシェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
Ryuichi Ueda
 
日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー
Ryuichi Ueda
 
シェル芸勉強会と会場の話
シェル芸勉強会と会場の話シェル芸勉強会と会場の話
シェル芸勉強会と会場の話
Ryuichi Ueda
 
移動ロボットのナビゲーション
移動ロボットのナビゲーション移動ロボットのナビゲーション
移動ロボットのナビゲーション
Ryuichi Ueda
 
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
Ryuichi Ueda
 
第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド
Ryuichi Ueda
 
bash(の変な使い方)update
bash(の変な使い方)updatebash(の変な使い方)update
bash(の変な使い方)update
Ryuichi Ueda
 
第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング
Ryuichi Ueda
 
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Ryuichi Ueda
 
20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク
Ryuichi Ueda
 
第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ
Ryuichi Ueda
 
シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習
Ryuichi Ueda
 
ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018
Ryuichi Ueda
 
poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018
Ryuichi Ueda
 
Robot frontier lesson3 2018
Robot frontier lesson3 2018Robot frontier lesson3 2018
Robot frontier lesson3 2018
Ryuichi Ueda
 
Robot frontier lesson2 2018
Robot frontier lesson2 2018Robot frontier lesson2 2018
Robot frontier lesson2 2018
Ryuichi Ueda
 
Robot frontier lesson1 2018
Robot frontier lesson1 2018Robot frontier lesson1 2018
Robot frontier lesson1 2018
Ryuichi Ueda
 
第34回シェル芸勉強会
第34回シェル芸勉強会第34回シェル芸勉強会
第34回シェル芸勉強会
Ryuichi Ueda
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
Ryuichi Ueda
 

More from Ryuichi Ueda (20)

第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド第27回ロボティクスシンポジアスライド
第27回ロボティクスシンポジアスライド
 
シェル・ワンライナー160本ノック
シェル・ワンライナー160本ノックシェル・ワンライナー160本ノック
シェル・ワンライナー160本ノック
 
日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー日本ロボット学会第139回ロボット工学セミナー
日本ロボット学会第139回ロボット工学セミナー
 
シェル芸勉強会と会場の話
シェル芸勉強会と会場の話シェル芸勉強会と会場の話
シェル芸勉強会と会場の話
 
移動ロボットのナビゲーション
移動ロボットのナビゲーション移動ロボットのナビゲーション
移動ロボットのナビゲーション
 
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
PythonとJupyter Notebookを利用した教科書「詳解確率ロボティクス」の企画と執筆
 
第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド第45回シェル芸勉強会オープニングスライド
第45回シェル芸勉強会オープニングスライド
 
bash(の変な使い方)update
bash(の変な使い方)updatebash(の変な使い方)update
bash(の変な使い方)update
 
第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング第41回シェル芸勉強会 午後オープニング
第41回シェル芸勉強会 午後オープニング
 
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
Searching Behavior of a Simple Manipulator only with Sense of Touch Generated...
 
20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク20181113_子ども夢ロボット&トーク
20181113_子ども夢ロボット&トーク
 
第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ第37回シェル芸勉強会イントロ
第37回シェル芸勉強会イントロ
 
シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習シェル芸勉強会にみる、コミュニティを通じたIT学習
シェル芸勉強会にみる、コミュニティを通じたIT学習
 
ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018ROSチュートリアル ROBOMECH2018
ROSチュートリアル ROBOMECH2018
 
poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018poster of PFoE used in ICRA 2018
poster of PFoE used in ICRA 2018
 
Robot frontier lesson3 2018
Robot frontier lesson3 2018Robot frontier lesson3 2018
Robot frontier lesson3 2018
 
Robot frontier lesson2 2018
Robot frontier lesson2 2018Robot frontier lesson2 2018
Robot frontier lesson2 2018
 
Robot frontier lesson1 2018
Robot frontier lesson1 2018Robot frontier lesson1 2018
Robot frontier lesson1 2018
 
第34回シェル芸勉強会
第34回シェル芸勉強会第34回シェル芸勉強会
第34回シェル芸勉強会
 
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」第32回信号処理シンポジウム「Raspberry PiとROSを使ったロボットシステム」
第32回信号処理シンポジウム「Raspberry PiとROSを 使ったロボットシステム」
 

Recently uploaded

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
NTT DATA Technology & Innovation
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
Sony - Neural Network Libraries
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
iPride Co., Ltd.
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
yassun7010
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
atsushi061452
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 

Recently uploaded (16)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 

awk v.s. bashどっちが強い?@OSC2011Tokyo

  • 1. 「シェルスクリプト VS AWK」 どっちが強い!? プログラミングバトル 日本 gnu awk ユーザー会 斉藤博文 USP友の会 上田隆一
  • 2. この発表 • awk と シェルスクリプト(bash) の対決 – どっちが強い?(小学生風) – 同じお題をawkとシェルスクリプトで書く • スクリプトの華麗さを競う – 対決者 • awk: 斉藤博文(日本 gnu awk ユーザー会) – @hi_saito • シェルスクリプト: 上田隆一(USP友の会) – @usptomo, @ryuichiueda 2011年11月19日 OSC2011 Tokyo Fall 2
  • 3. awk • 1977 年にできたスクリプト言語 – GNU awk は 1985 年 • UNIX の創造者の英知の集合 – Alfred Aho – Peter Weinberger – Brian Kernighan • 実は awk は高速 – nawk << Ruby, Perl < gawk << mawk << C 2011年11月19日 OSC2011 Tokyo Fall 3
  • 4. bashスクリプト • シェルスクリプト – 手で端末に打つコマンドをファイルに書くだけ • bash – Linux標準、使ったこと無い人はいないはず • コマンド使い放題 – 超高級プログラミング言語としての側面 • 処理の大半はコマンドに任せる • bashを端末を叩く人はみんなプログラマ アイコン?マスコット? んなもん無い。 2011年11月19日 OSC2011 Tokyo Fall 4
  • 5. 本日のお題 • Round 1 小技: apache logさばき • Round 2 中技: CGIで何かアピール • Round 3 フリー演技 2011年11月19日 OSC2011 Tokyo Fall 5
  • 6. 1回の表 (ノーアウト) Apache のログ解析の極意 FS にダブルクォート (") を使え! • ダブルクォートを FS にすると・・・ – $1:アクセス元、日付 ほとんどの – $2: 受け取ったコマンド 解析が便利に – $3: ステータスコード なるよ! – $6: クライアント情報 2011年11月19日 OSC2011 Tokyo Fall 6
  • 7. 1回の表 (1 アウト) ログ解析の極意 awk だけに頼るな! 御題 最も多く 404 を返しているサイトを探せ! • awk だけで書こうとすると結構大変かも。 • shell のパイプで繋げるとデバッグもしやすいね。 2011年11月19日 OSC2011 Tokyo Fall 7
  • 8. 1回の表 (2 アウト) #! /bin/gawk -f BEGIN { FS = """; } $3 ~ / 404 / { split($1, arr, / /); count[arr[1]]++; } END { for (a in count) { stat_arr[i++] = sprintf("%010s", count[a]) " " a; } num = asort(stat_arr); split(stat_arr[num], url, / /); print url[2]; } awk だけでできるけど、直感的じゃないよね。 2011年11月19日 OSC2011 Tokyo Fall 8
  • 9. 1回の表 (2 アウト) $ cat access_log | awk -F '"' '$3 ~ / 404 /' | awk '$0 = $1' | sort | uniq -c | sort -nr | awk 'NR == 1 && $0 = $2' 127.0.0.1 # オレかよ!! 分かりやすいし、途中結果も確認しやすいね。 2011年11月19日 OSC2011 Tokyo Fall 9
  • 10. 1回の表 (2 アウト) バッファに溜まって出力されない? system() は fflush() することをうまく使え! 御題 リアルタイムで IP アドレスからホスト名を引け! $ tail -f access_log | awk '{system ("dig -x" $1 " +short")}' 2011年11月19日 OSC2011 Tokyo Fall 10
  • 11. 1回の裏 • シェルスクリプトでのログ処理 – データを正規化しておくと以後の処理が簡単に 000003795 1 114.182.31.102 000003795 2 - 000003795 3 - 000003795 4 20111106 162032 000003795 5 GET /usage/ctry_usage_201110.png HTTP/1.1 000003795 6 200 000003795 7 4168 000003795 8 http://www.araibo.com/usage/usage_201110.html 000003795 9 Mozilla/5.0 (X11; Linux i686; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 000003796 1 66.249.66.18 000003796 2 - 000003796 3 - 000003796 4 20111106 164022 000003796 5 GET /paper/ARAIBO_TechnicalReport2006.pdf HTTP/1.1 000003796 6 200 000003796 7 1801153 000003796 8 - 000003796 9 Googlebot/2.1 (+http://www.google.com/bot.html) 2011年11月19日 OSC2011 Tokyo Fall 11
  • 12. 1回の裏 • 正規化スクリプト – ...結構awk依存 #!/bin/bash -vx dir=/var/www/html/OSC tmp=/tmp/$$ cat $dir/LOG/httpd/access_{log.*,log} | sed -e 's/(..*) (..*) (..*) [(..*)] "(..*)" (..*) (..*) "(..*)" "(..*)"$/1ダァシェリイェス2ダァシェリイェス3ダァシェリイェス4ダァ シェリイェス5ダァシェリイェス6ダァシェリイェス7ダァシェリイェス8ダァシェリイェス9/' | awk -F"ダァシェリイェス" '{c=1;for(i=1;i<=NF;i++){print NR,c++,$i}}' | awk '{$1=sprintf("%09s",$1);print}' > $tmp-data awk '$2==4' $tmp-data | tr '/:' ' ' | awk '{print $4,$0}' |sed -f $dir/SYS/MONTH | awk '{print $2,$3,$6$1$4,$7$8$9}'| sort -ms -k1,2 - $tmp-data | awk '$2!=4 || $3!~/:/' > $dir/LOG/ACCESS_LOG 2011年11月19日 OSC2011 Tokyo Fall 12
  • 13. 1回の裏 • 続きは端末で – 404エラーを出したIP • $ cat ../LOG/ACCESS_LOG | awk '$2==1 || $2==6 ' | awk '{if($2==1){printf("%s ",$0)}else{print}}' | grep "404$" | awk '{print $3}' | sort | uniq -c | awk '{print $2,$1}' | sort -k2,2n – 閲覧された回数 • $ awk '$2==5' ../LOG/ACCESS_LOG | awk '{print $4}' | sort | uniq -c | egrep "cgi|php|htm|html" | awk '{print $2,$1}' | sort -k2,2n ※難しいでしょうか?? いや、出力見ながらパイプをつなげていくだけなので、 案外簡単です。 2011年11月19日 OSC2011 Tokyo Fall 13
  • 14. 2回の表 (ノーアウト) awk で CGI を作る時の極意 GET と POST を意識せよ! 最近の LL だと GET と POST を意識しなければ いけないのはオワコンかもしれないけど、知って損 なし。 2011年11月19日 OSC2011 Tokyo Fall 14
  • 15. 2回の表 (1 アウト) 御題 日々の体重を記録せよ! • 体重を入力すると、グラフにしていってくれる。 • スマートフォンでアプリ化するほどのものでも ないよね。 2011年11月19日 OSC2011 Tokyo Fall 15
  • 16. 2回の表 (1 アウト) グラフの極意 Gnuplot を使いこなせ! • 手軽 munin とか • テキストベースで扱える Webalizer の • 出力の種類が多い ようなものも 作れる! 2011年11月19日 OSC2011 Tokyo Fall 16
  • 17. 2回の表 (2 アウト) <html> <head> <title>AWK の CGI サンプル</title> </head> <body> <form method="GET" action="graph.cgi"> <input type="text" value="60" name="weight"> <input type="submit" value="get" name="submit"> </form> </body> </html> これは普通の HTML です。 2011年11月19日 OSC2011 Tokyo Fall 17
  • 18. 2回の表 (2 アウト) #! /bin/gawk -f ## graph.cgi BEGIN { data_file = "data.txt"; ORS = "rn"; split(ENVIRON["QUERY_STRING"], arr_query, "&"); for (i in arr_query) { split(arr_query[i], arr_query_val, "="); query_name = arr_query_val[1]; query_str = arr_query_val[2]; query[query_name] = query_str; } GET なので環境変数からデータを格納する。 2011年11月19日 OSC2011 Tokyo Fall 18
  • 19. 2回の表 (2 アウト) now = strftime("%Y/%m/%d-%H:%M"); printf("%s %sn", now, query["weight"])>>data_file; close(data_file); print " set xdata timen set timefmt '%Y/%m/%d-%H:%M:%S'n set terminal pngn set yrange [0:100]n set xlabel 'Date'n set ylabel 'Weight (Kg)'n set output 'graph.png'n plot '" data_file "' using 1:2 title 'Weight' with linesn quitn " | "gnuplot > /dev/null"; データを格納し、Gnuplot でグラフを描く。 2011年11月19日 OSC2011 Tokyo Fall 19
  • 20. 2回の表 (2 アウト) は 細 に 詳 ス print "Content-Type: text/html"; ブ ーGo! print ""; print " <html> <head> <title>体重のグラフ</title> </head> <body> <img src='graph.png'> </body> </html> "; } HTML を出力し、画面にグラフを表示する。 2011年11月19日 OSC2011 Tokyo Fall 20
  • 21. 2回の裏 • テキストの表をブラウザに出力してみる。 – コマンドにしてみました。 html_tableコマンド #!/bin/bash echo '<table cellspacing="0" border="1">' sed -e 's;^;t<tr>ntt<td>;' -e 's;$;</td>nt</tr>;' -e 's; ;</td>ntt<td>;g' < /dev/stdin echo '</table>' 2011年11月19日 OSC2011 Tokyo Fall 21
  • 22. 2回の裏 • すごく頑丈なアクセスカウンタを作ってきました。 #!/bin/bash -vx dir=/home/usp/ACCESS_COUNTER echo -n 1 >> $dir/POMPA/COUNTER echo "Content-type: text/htmln" ls -l $dir/POMPA/COUNTER | awk '{print $5}' exit 0 – HTTP出力込みでわずか6行 – 原理 • アクセスがあるとカウンタファイルを1バイト増やす • lsでカウンタファイルの容量を調べて出力 • 排他処理なんてイラネエ。あ、awkを使ってもうた。 2011年11月19日 OSC2011 Tokyo Fall 22
  • 23. 2回の裏 • ドリルダウン機能つきの表(USP研究所のデモから) – bashで書いたCGIスクリプト • ユーザの操作履歴をPOSTで受ける • 操作履歴から表示するレコード、開閉ボタンを準備 • htmlのテンプレートに貼り付けて出力 もっと派手なものが 見たければブースへ!! 2011年11月19日 OSC2011 Tokyo Fall 23
  • 24. 3回の表 (そして伝説へ・・・) gawk で @include する極意! igawk は 100 % shell なので注意! eval gawk $opts -- '"$processed_program"' '"$@"' • 中間ファイルを作成しないように、直接ソースを gawk に食わせている ため、巨大なスクリプトを実行するとエラーになる。orz – comp.lang.awk の FAQ ・・・ 2011年11月19日 OSC2011 Tokyo Fall 24
  • 25. 3回の表 (そして伝説へ・・・) 電卓を作る極意! 好きな言語で記述せよ! calc() {awk "BEGIN {print $*}"} • これ、マジ便利です! • Perl, Ruby, Python, etc. 自分の好きな言語でどうぞ! 2011年11月19日 OSC2011 Tokyo Fall 25
  • 26. 3回の表 (そして伝説へ・・・) shell を作る極意! 100 % ネタです! awk '{system($0)}' 2011年11月19日 OSC2011 Tokyo Fall 26
  • 27. 3回の表 (そして伝説へ・・・) は 細 に 詳 ス ブ ーGo! ppencode の極意! length() は length でエラーにならない!  0 : length 1 : cos(length) 2 : int(exp(cos(length))) 3 : ... • length が引数なしでエラーにならないのはバグとして報告されている ので、いつか使えなくなるかも? 2011年11月19日 OSC2011 Tokyo Fall 27
  • 28. 3回の表 (そして伝説へ・・・) は 細 に 詳 ス ブ ーGo! CMS を作る極意! 根気と気合です! 全て awk で記述された Blis を改良 • し、RSS も生成するようにしてある。 2011年11月19日 OSC2011 Tokyo Fall 28
  • 29. 3回の表 (そして伝説へ・・・) は 細 に 詳 ス ブ ーGo! ImageMagick を扱う極意! 文字コードを UTF-8 に揃えよ! • UTF-8 ならコマンドラインから文字 列を指定して、年賀状とか書けちゃう よ。 2011年11月19日 OSC2011 Tokyo Fall 29
  • 30. 3回裏(伝説なのか?) • 他の言語を使う。 – PYTHON.sh, C.sh, RUBY.sh, ... #!/bin/bash # エクセルシートのB列の値を足す。 ruby << FIN | awk 'BEGIN{sum=0}{sum+=$1}END{print sum}' require 'rubygems' require 'spreadsheet' book = Spreadsheet.open './hoge.xls' sheet = book.worksheet 0 for i in 0..3 print sheet[i,1] print "n" end FIN 2011年11月19日 OSC2011 Tokyo Fall 30
  • 31. 3回裏(伝説なのか?) • webから数値参照で書かれた文字列を 取ってくる。 #!/bin/bash curl $1 | grep '&#' | w3m -dump -T text/html 2011年11月19日 OSC2011 Tokyo Fall 31
  • 32. 3回裏(伝説なのか?) • クローラを作ってきました。 #!/bin/bash -vx mkdir -p ./cache cd ./cache echo 'http://www.google.co.jp/' > ./url.1 for i in 2 3 4 ; do cat ./url.$(( $i - 1 )) | wget -i - cat ./* | sed -e 's|href="([^"][^"]*)"|n1n|g' | grep ^http | sort | uniq                    > ./url.$i done exit 0 2011年11月19日 OSC2011 Tokyo Fall 32
  • 33. 3回裏(伝説なのか?) • ブースにて、bashで書かれたシステムを お見せします。 2011年11月19日 OSC2011 Tokyo Fall 33
  • 34. まとめ • awkなしでシェルスクリプトを書くのは大変だね • シェルスクリプトと awk で世界が広がるよ – ということで友好団体になりました。 • 質問はブースへ – 隣同士にいます。 2011年11月19日 OSC2011 Tokyo Fall 34