If statement awk“中两种模式之间的匹配;如果/否则“;陈述

If statement awk“中两种模式之间的匹配;如果/否则“;陈述,if-statement,awk,output,sar,If Statement,Awk,Output,Sar,我有一个awk问题,我似乎无法解决。我试图从SAR解析数据,发现有些系统使用不同的语言环境,我得到的输出也不同。长期的解决方案是将所有系统上输出数据的区域设置更改为相同的内容,但我现在必须解析旧数据,而这目前不是一个选项。以下是我获得的两类数据: 24小时输出: 21:10:01 all 8.43 0.00 1.81 2.00 0.00 87.76 21:20:01 all 7.99

我有一个awk问题,我似乎无法解决。我试图从SAR解析数据,发现有些系统使用不同的语言环境,我得到的输出也不同。长期的解决方案是将所有系统上输出数据的区域设置更改为相同的内容,但我现在必须解析旧数据,而这目前不是一个选项。以下是我获得的两类数据:

24小时输出:

21:10:01          all      8.43      0.00      1.81      2.00      0.00     87.76
21:20:01          all      7.99      0.00      1.74      0.82      0.00     89.44
21:30:01          all      8.35      0.00      1.76      0.94      0.00     88.95
09:10:01 PM         all      8.43      0.00      1.81      2.00      0.00     87.76
09:20:01 PM         all      7.99      0.00      1.74      0.82      0.00     89.44
09:30:01 PM         all      8.35      0.00      1.76      0.94      0.00     88.95
12小时输出:

21:10:01          all      8.43      0.00      1.81      2.00      0.00     87.76
21:20:01          all      7.99      0.00      1.74      0.82      0.00     89.44
21:30:01          all      8.35      0.00      1.76      0.94      0.00     88.95
09:10:01 PM         all      8.43      0.00      1.81      2.00      0.00     87.76
09:20:01 PM         all      7.99      0.00      1.74      0.82      0.00     89.44
09:30:01 PM         all      8.35      0.00      1.76      0.94      0.00     88.95
我需要一个
awk
语句,该语句将从早上7点到晚上7点获取所有SAR数据的项目。我本来有一些工作,但一旦我发现这个问题,它打破了所有的24小时输出。我试图让
awk
语句正常工作,但以下操作不起作用,我也不知道如何使其正常工作:

awk '{ if ($2 == "AM" || $2 == "PM" && /07:00/,/07:00/) print $1" "$2; else '/07:00/,/19:00 print $1}' SAR_OUTPUT_FILE.txt
基本上,我试图输出的是,如果是24小时格式,搜索07:00-19:00,只返回输出的第一列(因为没有“AM/PM”列。如果它找到“AM/PM”,我会相信这是12小时格式,希望从07:00-07:00获取所有内容,并返回第一列和第二列(时间+“AM/PM”)


这里有人能帮我吗?

如果不访问带有时间函数()的awk,您可以更改12小时结束时间,以便使用24小时时间测试对其进行测试

这里有一个awk可执行文件,它通过调整12小时格式时间中的小时数来适应24小时格式。结果被放入每行的变量
t
,并被测试为在24小时范围内

#!/usr/bin/awk -f

function timeShift(       a, h ) {
    if(NF==9 && split($1, a, ":")==3) {
        if(a[1]==12)        h = $2=="PM"?"12":"00"
        else if($2=="PM")   h = (a[1]+12)%24
        else                h = a[1]
        return( h ":" a[2] ":" a[3] )
    }
    return( $1 )
}

{ t = timeShift() }

t >= "07:00:00" && t <= "19:00:00"
!/usr/bin/awk-f
功能时间换档(a、h){
如果(NF==9&&split($1,a,“:”)==3){
如果(a[1]==12)h=$2==“PM”?“12”:“00”
如果($2==“PM”)h=(a[1]+12)%24
否则h=a[1]
返回(h):“a[2]:“a[3])
}
报税表(1美元)
}
{t=timeShift()}

t>=“07:00:00”&&t您的12小时示例似乎是24小时格式的。数据实际上是这样的吗?@dawg-不,在漫长的一天之后,时间越来越晚了。我更新了它以反映12小时的实际输出。谢谢。如果数据与您所说的完全一致,那么
awk'$2==“PM”&$1~/0[1-6]:| 07:00/$2==“AM”&$1~/(0[8-9]| 1-2]):| 07:00/“
应该可以