シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編
この記事は弊チームの新人の方にシェル操作に慣れてもらうために作った課題である。
皆様のチームの新人にやってもらってもいいですね。
あとで解答編を書く。
もちろん他の方も解いてもらって構わない。
というか僕の解答以上の解答がきっとあるはずなので、それを教えて欲しい。
はてブで解答でも面白解答お待ちしてます。
さて本題。
Webアプリケーションを作っていると偉いさんとか、いわゆる企画の人とかから
「ちょっと○○がどうなってるかログから数字だせない?」
とさらっとお願いされたりする。
そこで「いや、ちょっと手が空いてなくて(こっちは忙しいんだよ糞がっ)」と答えたくなるかもしれないが、
そこは「じゃあさくっとやっておきますよ!僕にかかればちょろいっすよ!」と答えらればかっこいい。
(あまりさくっとやりすぎるとそういう細々依頼がたくさんくる諸刃の剣)
例えば以下のようなログファイルがあったとする。
ファイルの形式は、カンマ区切りで「サーバー名,unixtime,ユーザーID,アクセス先」。
server1,1343363124,30,/video.php server2,1343363110,20,/profile.php server3,1343363115,7,/login.php server1,1343363105,8,/profile.php server2,1343363205,35,/profile.php server2,1343363110,20,/profile.php server3,1343363205,30,/login.php server4,1343363225,12,/video.php server1,1343363265,7,/video.php
追記:ブログ書きながら色々元ファイル修正してたらミスってました。想定解答が違ったりして皆様に迷惑かけました。ごめんなさい。
以下に、このファイルを元にやってほしい作業を書くのでターミナルで作業して想定期待結果を表示して欲しい。
ヒントが書いてあるが、ヒント通りにやらなくてもいい。
もちろんヒントはググっていいし、>man cat とかでマニュアルも見よう。
いっそpythonのワンライナーで実行したらカッコイイと思うw
え。Windows?まさか???cygwin入れたり、vmでやってみたり、開発サーバーで作業すればいいんじゃないっすか(ホジホジ)
ヒント:cat,パイプ,sort,cut,uniq,wc,sed,perl,awk,grep,head,tail,date,and so on
問1 このファイルを表示しろ
想定期待結果はファイル全体の表示
問2 このファイルからサーバー名とアクセス先だけ表示しろ
想定期待結果:
server1,/video.php server2,/profile.php server2,/login.php server1,/profile.php server2,/profile.php server2,/profile.php server3,/login.php server4,/video.php server1,/video.php
問3 このファイルからserver4の行だけ表示しろ
想定期待結果:
server4,1343363225,12,/video.php
問4 このファイルの行数を表示しろ
想定期待結果: 9
問5 このファイルをサーバー名、ユーザーIDの昇順で5行だけ表示しろ
想定期待結果:
server1,1343363265,7,/video.php server1,1343363105,8,/profile.php server1,1343363124,30,/video.php server2,1343363115,7,/login.php server2,1343363110,20,/profile.php
問6 このファイルには重複行がある。重複行はまとめて数え行数を表示しろ
想定期待結果: 8
補足:
hoge,30 foo,20 hoge,30
だったら2行と数える。
問7 このログのUU(ユニークユーザー)数を表示しろ
想定期待結果: 6
問8 このログのアクセス先ごとにアクセス数を数え上位1つを表示しろ
想定期待結果:3 /video.php
追記:Twitterで指摘されましたが間違ってました…これも元データブログ書いてる最中にいじったせいです。すいません><
想定期待結果: 4 /profile.php
問9 このログのserverという文字列をxxxという文字列に変え、サーバー毎のアクセス数を表示しろ
想定期待結果:
3 xxx1 3 xxx2 2 xxx3 1 xxx4
追記:上記想定結果も最初書いたのと変えました。元データが(ry すいませんでした><
問10 このログのユーザーIDが10以上の人のユニークなユーザーIDをユーザーIDでソートして表示しろ
想定期待結果:
12 20 30 35
ログが数十Gだったら?
Hadoop使っとけ
あるいはExcelは大171億7986万9184件のデータが使えるのでExcel使えばいいのでは
http://itpro.nikkeibp.co.jp/article/NEWS/20120725/411322/