0

理解できないように見える問題があります。SAR からデータを解析しようとしていますが、一部のシステムが別のロケールを使用していて、別の出力が得られていることがわかりました。長期的な解決策は、出力データのすべてのシステムのロケールを同じものに変更することですが、今のところ古いデータを解析する必要があり、それは現在のオプションではありません。私が取得する2種類のデータは次のとおりです。

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

12 時間出力:

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すべての SAR データについて、午前 7 時から午後 7 時までのアイテムを取得するステートメントが必要です。もともと何かが機能していましたが、この問題を見つけたら、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 のすべてを取得して、1 番目と 2 番目の列 (時間 + 「AM/PM」) の両方を返したいと考えています。

誰か助けてくれませんか?

4

1 に答える 1

0

時間関数 ( strftime() または mktime() )を使用して awk にアクセスしない場合、12 時間の終了時間をシフトして、24 時間の時間テストでテストできるようにすることができます。

これは、12 時間形式の時間を 24 時間形式に合わせて調整する awk 実行可能ファイルです。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"

行全体よりも少ないフィールドを出力する必要がある場合は、最後の式の後にアクション ブロックを追加できます。

于 2015-03-16T05:07:56.983 に答える