带awk的条件语句



我是linux 的新手

我正试着用gawk获取两次约会之间的日志。

这是我的日志

Oct 07 11:00:33 abcd
Oct 08 12:00:33 abcd
Oct 09 14:00:33 abcd
Oct 10 21:00:33 abcd

startend日期都发送时,我可以这样做

但当startend日期或both没有发送时,我有问题

我不知道怎么查。

我已经写了下面的代码,但它有语法错误。

sudo gawk -v year='2022'  -v start='' -v end='2022:10:08 21:00:34' '
BEGIN{ gsub(/[:-]/," ", start); gsub(/[:-]/," ", end) }
{ dt=year" "$1" "$2" "$3; gsub(/[:-]/," ", dt) }
if(start && end){mktime(dt)>=mktime(start) && mktime(dt)<=mktime(end)}
else if(end){mktime(dt)<=mktime(end)} 
else if(start){mktime(dt)>=mktime(start)} ' log.txt

如何修改此代码?

我会写:

gawk -v end="Oct 10 12:00:00" '
function to_epoch(timestamp,     n, a) {
n = split(timestamp, a, /[ :]/)
return mktime(strftime("%Y", systime()) " " month[a[1]] " " a[2] " " a[3] " " a[4] " " a[5])
}
BEGIN {
split("Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec", m)
for (i=1; i<=12; i++) month[m[i]]=i
if (start) {_start = to_epoch(start)} else {_start = 0}
if (end)   {_end   = to_epoch(end)}   else {_end   = 2**31}
}
{ ts = to_epoch($0) }
_start <= ts && ts <= _end
' log.txt

您将传递与日志文件中显示的日期时间格式相同的start和/或end变量。

使用日期实用程序会更容易,例如:

<infile dategrep -i '%b %d %H:%M:%S' '>Oct 08 00:00:00' |
dategrep -i '%b %d %H:%M:%S' '<Oct 09 23:59:59'

输出:

Oct 08 12:00:33 abcd
Oct 09 14:00:33 abcd

相关内容

  • 没有找到相关文章

最新更新