我想逐行从日志文件中提取时间戳和文件大小信息,每行的格式如下:
34600 - - [30 / Apr / 1998:21:30:17 +0000]“GET /images/hm_bg.jpg HTTP / 1.0”200 24736
括号包含时间戳,最后一段'24736'代表文件大小。
任何人都可以使用shell脚本或其他语言知道如何使用它吗?
答案 0 :(得分:0)
尝试类似
的内容#!/bin/bash
while read -r line; do
[[ $line =~ '['(.*)']' ]] && echo "${BASH_REMATCH[1]} ${line##*' '}"
done < file
e.g。
> cat file
34600 - - [30/Apr/1998:21:30:17 +0000] "GET /images/hm_bg.jpg HTTP/1.0" 200 24736
> while read -r line; do [[ $line =~ '['(.*)']' ]] && echo "DATE=${BASH_REMATCH[1]} SIZE=${line##*' '}"; done < file
DATE=30/Apr/1998:21:30:17 +0000 SIZE=24736
答案 1 :(得分:0)
您可以使用awk
:
awk '{sub(/[][]/,""); printf "DATE: %s SIZE: %s \n", $4,$NF}' file
Date: 30/Apr/1998:21:30:17 Size: 24736
答案 2 :(得分:0)
使用sed
sed -nr 's/.*\[([^]]*)\].* ([0-9]+)/\1 \2/p' file
30/Apr/1998:21:30:17 +0000 24736