シェル操作課題やってみた

シェル操作課題やってみた.

log.txt

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 log.txt
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

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

cut -d ',' -f 1,4 log.txt
server1,/video.php
server2,/profile.php
server3,/login.php
server1,/profile.php
server2,/profile.php
server2,/profile.php
server3,/login.php
server4,/video.php
server1,/video.php

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

grep '^server4' log.txt
server4,1343363225,12,/video.php

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

wc -l log.txt
       9 log.txt

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

sort -t ',' -k 1,1 -k 3,3g log.txt | head -n 5
server1,1343363265,7,/video.php
server1,1343363105,8,/profile.php
server1,1343363124,30,/video.php
server2,1343363110,20,/profile.php
server2,1343363110,20,/profile.php

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

sort -u log.txt | wc -l
       8

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

cut -d ',' -f 3 log.txt | sort -u | wc -l
       6

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

cut -d ',' -f 4 log.txt | sort | uniq -c | sort -r | head -n 1
   4 /profile.php

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

cat log.txt | sed -e 's/server/xxx/' | cut -d ',' -f 1 | sort | uniq -c
   3 xxx1
   3 xxx2
   2 xxx3
   1 xxx4

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

give up

解答と比べてみたけど,まだまだスキルが足りないな…

あとawkもきちんと使えるようになって問10みたいなのにも対応できるようになりたい.