LoginSignup
11
11

More than 5 years have passed since last update.

シェル操作課題をawkで解く

Last updated at Posted at 2014-04-29

awkの勉強をしていると、シェル操作課題 (cut, sort, uniq などで集計を行う) 設問編を見つけたので出来るだけawkを使って解いてみた。

問題ファイル

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 このファイルを表示しろ

想定期待結果:
ファイル全体の表示
$ awk '{print}' sample

問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 
$ awk -F '[,]' '{print $1, $4}' sample

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

想定期待結果:
server4,1343363225,12,/video.php 
$ awk '/server4/' sample

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

想定期待結果:
9
$ awk '{print}' sample | wc -l

問5 このファイルをサーバー名、ユーザーIDの昇順で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
$ sort -k1,1 -k3,3n -t"," sample | awk 'NR<6'

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

想定期待結果:
8

補足:
hoge,30
foo,20
hoge,30 
だったら2行と数える。
$ awk '{a[$0]=$0} END {print length(a)}' sample

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

想定期待結果: 6

$ awk -F'[,]' '{print $3}' sample | sort | uniq | wc -l

$ awk -F'[,]' '{print $3}' sample | awk '{a[$0] = $0} END {print length(a)}'

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

想定期待結果: 4 /profile.php

$ awk -F'[,]' '{print $4}' sample | sort | uniq -c | sort -rn | head -1

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

想定期待結果:
3 xxx1
3 xxx2
2 xxx3
1 xxx4
$ awk -F'[,]' '{print $1}' sample | awk 'sub(/server/,"xxx")' | sort | uniq -c

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

想定期待結果:
12
20
30
35
$ awk -F'[,]' '{print $3}' sample | awk '$0>10 {print}' | sort | uniq
11
11
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
11