このページの記事一覧

2012年7月28日土曜日

シェル操作課題 (cut, sort, uniq などで集計を行う)

Twitterで流れてきたのでやってみた。
多分awkとか使った方がスマートなんだろうけど、ちょっと避け気味なので使ってません。
(元ネタ => http://d.hatena.ne.jp/Yamashiro0217/20120727/1343371036)

元ファイル(server.log)

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

問1 このファイルを表示しろ

cat server.log

問2 このファイルからサーバー名とアクセス先だけ表示しろ

cut -f1,4 -d, server.log

問3 このファイルからserver4の行だけ表示しろ

grep server4 server.log

問4 このファイルの行数を表示しろ

wc -l server.log | sed -e 's/server\.log//g' -e 's/ //g'

問5 このファイルをサーバー名、ユーザーIDの昇順で5行だけ表示しろ

sort server.log -k 1,1 -k 3n -t , | head -n5

問6 このファイルには重複行がある。重複行はまとめて数え行数を表示しろ

sort server.log | uniq | wc -l | sed -e 's/ //g'

問7 このログのUU(ユニークユーザー)数を表示しろ

cut -f3 -d, server.log | sort | uniq | wc -l | sed -e 's/ //g'

問8 このログのアクセス先ごとにアクセス数を数え上位1つを表示しろ

cut -f4 -d, server.log | sort | uniq -c | sort -nr | head -n1 | sed -e 's/^ *//'

問9 このログのserverという文字列をxxxという文字列に変え、サーバー毎のアクセス数を表示しろ

cut -f1 -d, server.log | sort | uniq -c | sed -e 's/server/xxx/' -e 's/^ *//'

問10 このログのユーザーIDが10以上の人のユニークなユーザーIDをユーザーIDでソートして表示しろ

cut -f3 -d, server.log | sort -n | uniq | egrep '[0-9]{2,}'


cutとsortしまくりや!