我想從日誌文件中逐行提取時間戳和文件大小信息,每行都採用以下格式:如何使用shell腳本逐行讀取日誌文件並提取時間戳和文件大小信息?
34600 - - [30/Apr/1998:21:30:17 +0000] 「GET /images/hm_bg.jpg HTTP/1.0」 200 24736
托架包含時間戳和最後段 '24736' 代表文件大小。
任何人都可以知道如何使用shell腳本或其他語言來做到這一點嗎?
我想從日誌文件中逐行提取時間戳和文件大小信息,每行都採用以下格式:如何使用shell腳本逐行讀取日誌文件並提取時間戳和文件大小信息?
34600 - - [30/Apr/1998:21:30:17 +0000] 「GET /images/hm_bg.jpg HTTP/1.0」 200 24736
托架包含時間戳和最後段 '24736' 代表文件大小。
任何人都可以知道如何使用shell腳本或其他語言來做到這一點嗎?
嘗試像
#!/bin/bash
while read -r line; do
[[ $line =~ '['(.*)']' ]] && echo "${BASH_REMATCH[1]} ${line##*' '}"
done < file
例如
> 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
您可以使用awk
:
awk '{sub(/[][]/,""); printf "DATE: %s SIZE: %s \n", $4,$NF}' file
Date: 30/Apr/1998:21:30:17 Size: 24736
使用SED
sed -nr 's/.*\[([^]]*)\].* ([0-9]+)/\1 \2/p' file
30/Apr/1998:21:30:17 +0000 24736