Команда sed
использует s!pattern!replacement!g
для выполнения глобального поиска и замены.Шаблон поиска /(users|geo|places)/[0-9]+
соответствует /users/
, /geo/
или /places/
, за которым следует число.Строка замены /\1/#
оставляет исходное слово на месте с измененным числом на #
.
$ awk '/^\[/ {print $3,$4,$6}' test.log |
sed -r 's!/(users|geo|places)/[0-9]+!/\1/#!g' |
sort | uniq -c
1 GET /cgi-bin/try/ 200
1 GET /hidden/ 404
1 GET /users/#/geo/ 504
4 GET /users/#/places/ 202
1 POST /geo/#/places/#/ 202
2 POST /hidden/ 404
1 POST /users/#/places/ 202
1 PUT /cgi-bin/try/ 200
3 PUT /geo/#/places/#/ 202
1 PUT /users/#/geo/ 504
Если вы хотите получить точный формат вывода, который вы указали, вы можете использовать column
для выравнивания данных ваккуратные столбцы.
$ awk '/^\[/ {print $3,$4,$6}' test.log |
sed -r 's!/(users|geo|places)/[0-9]+!/\1/#!g' |
sort | uniq -c |
{ echo 'verb uri status count'; awk '{print $2,$3,$4,$1}' } |
column -t
verb uri status count
GET /cgi-bin/try/ 200 1
GET /hidden/ 404 1
GET /users/#/geo/ 504 1
GET /users/#/places/ 202 4
POST /geo/#/places/#/ 202 1
POST /hidden/ 404 2
POST /users/#/places/ 202 1
PUT /cgi-bin/try/ 200 1
PUT /geo/#/places/#/ 202 3
PUT /users/#/geo/ 504 1