我的日志文件数据是
[10/04/16 02:07:20 BST] Data 1
[11/04/16 02:07:20 BST] Data 1
[10/05/16 04:11:09 BST] Data 2
[12/05/16 04:11:09 BST] Data 2
[11/06/16 06:22:35 BST] Data 3
我的输入格式是
./filename Apr 11 16 00:00:00 Jul 10 16 00:00:00
我正在使用以下函数将输入格式转换为日志文件格式
convert_date () {
local months=( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec )
local i
for (( i=0; i<11; i++ )); do
[[ $1 = ${months[$i]} ]] && break
done
printf "\[%2d\/%02d\/%02d $4 BST\]\n" $2 $(( i+1 )) $3
for (( i=0; i<11; i++ )); do
[[ $5 = ${months[$i]} ]] && break
done
}
我还将结果存储在变量中并使用它
Start=$( convert_date $1 $2 $3 $4 )
End=$( convert_date $5 $6 $7 $8 )
但是只有在日志文件中存在Stattime和endtime时,代码才会给出结果。即使日志文件中不存在开始时间和结束时间,如何在两次之间获取数据。我可以使用什么awk脚本?
答案 0 :(得分:0)
您的Bash(假设)功能似乎按以下格式输出日期:
$ bash test.sh "Apr 11 16 00:00:00"
\[11\/04\/16 00:00:00 BST\]
使用它,test.awk:
BEGIN {
FS="[[/: ]+"; # set field separator to all delimiters in datetime format in the date
split(start,arr,"[\\\\[/ :]") # split the start variable in pieces for reorganize
start=arr[4]" "arr[3]" "arr[2]" "arr[5]" "arr[6]" "arr[7] # reorganize
}
start <= $4" "$3" "$2" "$5" "$6" "$7 # compare reorganized data to date in start variable
$ awk -v start="\[11\/04\/16 00:00:00 BST\]" -f test.awk test.in
[11/04/16 02:07:20 BST] Data 1
[10/05/16 04:11:09 BST] Data 2
[12/05/16 04:11:09 BST] Data 2
[11/06/16 06:22:35 BST] Data 3
虽然有点抱怨:
awk: warning: escape sequence '\[' treated as plain '['
答案 1 :(得分:0)
输入格式在&#34; Input.Format&#34;文件和日志文件位于&#34; Log.File&#34;。这个shell脚本&#39; cat&#39;文件和管道都是“awk”#。 awk脚本将月份格式更改为编号,与日志文件进行比较以打开或关闭打印开关。
compute.v1.instanceTemplate