如何使用shell脚本逐行读取日志文件并提取时间戳和文件大小信息?

时间:2014-02-09 06:59:21

标签: bash shell

我想逐行从日志文件中提取时间戳和文件大小信息,每行的格式如下:

34600 - - [30 / Apr / 1998:21:30:17 +0000]“GET /images/hm_bg.jpg HTTP / 1.0”200 24736

括号包含时间戳,最后一段'24736'代表文件大小。

任何人都可以使用shell脚本或其他语言知道如何使用它吗?

3 个答案:

答案 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