SlideShare a Scribd company logo
1 of 34
Download to read offline
「シェルスクリプト 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

Present でスライドを作ろう
Present でスライドを作ろうPresent でスライドを作ろう
Present でスライドを作ろうYutaka Kato
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門icchy
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
ユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさYoshiki Hayama
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法Takuya Akiba
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...Shotaro Suzuki
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?Makoto SAKAI
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選Takuya Ueda
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414Kentaro Ebisawa
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話Tomohiro Nakajima
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門Yoshitaka Seo
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話yaegashi
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版Keiichiro Shikano
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~Takuya Akiba
 

What's hot (20)

Present でスライドを作ろう
Present でスライドを作ろうPresent でスライドを作ろう
Present でスライドを作ろう
 
シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門シェル芸初心者によるシェル芸入門
シェル芸初心者によるシェル芸入門
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさユーザーインタビューするときは、どうやらゾンビのおでましさ
ユーザーインタビューするときは、どうやらゾンビのおでましさ
 
プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法プログラミングコンテストでの動的計画法
プログラミングコンテストでの動的計画法
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
Developers-Summit-2022_Improving-Digital-Customer-Experience-with-Enterprise_...
 
[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?[Node-RED] ファンクションノードのデバッグどうしてる?
[Node-RED] ファンクションノードのデバッグどうしてる?
 
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
 
ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414ネットワークOS野郎 ~ インフラ野郎Night 20160414
ネットワークOS野郎 ~ インフラ野郎Night 20160414
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話Node-REDをIoTビジネスに適用するために苦労した3つの話
Node-REDをIoTビジネスに適用するために苦労した3つの話
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
Rpn and forth 超入門
Rpn and forth 超入門Rpn and forth 超入門
Rpn and forth 超入門
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話Raspberry Pi + Go で IoT した話
Raspberry Pi + Go で IoT した話
 
ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版ドキュメントシステムはこれを使え2015年版
ドキュメントシステムはこれを使え2015年版
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 

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
 
トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定トピックモデルを用いた 潜在ファッション嗜好の推定
トピックモデルを用いた 潜在ファッション嗜好の推定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.3Masahiro 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
 
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 matsuriYoshifumi 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_l8y_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博文 斉藤
 
プロトコル指向に想う世界観 #__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(の変な使い方)updateRyuichi 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チュートリアル ROBOMECH2018Ryuichi 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 2018Ryuichi Ueda
 
Robot frontier lesson3 2018
Robot frontier lesson3 2018Robot frontier lesson3 2018
Robot frontier lesson3 2018Ryuichi Ueda
 
Robot frontier lesson2 2018
Robot frontier lesson2 2018Robot frontier lesson2 2018
Robot frontier lesson2 2018Ryuichi Ueda
 
Robot frontier lesson1 2018
Robot frontier lesson1 2018Robot frontier lesson1 2018
Robot frontier lesson1 2018Ryuichi 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

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 

Recently uploaded (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

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