ログファイルで最初に表示される文字列を探し、T / F値を変数に設定し、発生した変更を記録する方法

ログファイルで最初に表示される文字列を探し、T / F値を変数に設定し、発生した変更を記録する方法

このヘッダーの名前を指定する方法はわかりませんが、私が得たものは次のとおりです。

次のテキストを含むファイル:

[10:03:43] 10:03:35 22JUN22  ConUP     CW1B1 T     CW1B3 T     CW1B5 T     CW1B7 T  
[10:03:44]                          CW2B1 T     CW2B4 T     CW2B5 T     CW2B7 T  
[10:03:44]                          CW3B1 T     CW3B4 T     CW3B5 T     CW4B4 T  
[10:03:44]                          CW4B8 T     CW5B4 T     CW5B8 T     CW6B4 T  
[10:03:44]                          CW6B8 T     CW7B8 T     CW8B4 T     CW8B8 T  
[10:03:44]                          CW9B4 T     CW9B8 T    CW10B4 T    CW10B8 T  
[10:03:44]                         CW11B4 T    CW11B8 T    CW12B4 T    CW12B8 T   
[10:04:16] 10:04:28 22JUN22  ConUP     CW1B1 T     CW1B3 T     CW1B5 T     CW1B7 T  
[10:04:36]                          CW2B1 F     CW2B3 F     CW2B5 F     CW2B7 F  
[10:04:36]                          CW3B1 T     CW3B4 T     CW3B5 T     CW4B4 T  
[10:04:36]                          CW4B8 T     CW5B4 T     CW5B8 T     CW6B4 T  
[10:04:37]                          CW6B8 T     CW7B8 T     CW8B4 T     CW8B8 T  
[10:04:37]                          CW9B4 T     CW9B8 T    CW10B4 T    CW10B8 T  
[10:04:37]                         CW11B4 T    CW11B8 T    CW12B4 T    CW12B8 T  

その後、実際のファイルはTrueとFalseの値の変更で埋められます。

aにTrue項目があり、最後の項目以降に変更されていない場合は、その項目を削除し、値がFalseに(またはFalseからTrueに)変更されたときにのみ保持したいと思います。

アイデアは、文字列(CW1B1など)の最初の項目を見つけて、それに続くTまたはF値を変数として保存する必要があることです。次に、次に表示される項目を確認してT / F値を比較します。同じ場合は、切り取りまたは送信を使用して項目を削除し、次の項目を見つけます。値が変更された場合は無視して続行してください。

予想出力:

[10:03:43] 10:03:35 22JUN22  ConUP     CW1B1 T     CW1B3 T     CW1B5 T     CW1B7 T  
[10:03:44]                          CW2B1 T     CW2B4 T     CW2B5 T     CW2B7 T  
[10:03:44]                          CW3B1 T     CW3B4 T     CW3B5 T     CW4B4 T  
[10:03:44]                          CW4B8 T     CW5B4 T     CW5B8 T     CW6B4 T  
[10:03:44]                          CW6B8 T     CW7B8 T     CW8B4 T     CW8B8 T  
[10:03:44]                          CW9B4 T     CW9B8 T    CW10B4 T    CW10B8 T  
[10:03:44]                         CW11B4 T    CW11B8 T    CW12B4 T    CW12B8 T   
[10:04:16] 10:04:28 22JUN22  ConUP       
[10:04:36]                          CW2B1 F     CW2B3 F     CW2B5 F     CW2B7 F  
[10:04:36]                          
[10:04:36]                          
[10:04:37]                          
[10:04:37]                          
[10:04:37]                         

おそらくより良い方法があるかもしれませんが、それでもフレームワークの助けが必要で、スクリプトに必要なすべての可能な変数を生成できます。

ベストアンサー1

これはおそらくあなたが望むものです(テスト可能なサンプル入力/出力が提供されていないのでテストされていません)。

awk '
    {
        for ( i=2; i<=NF; i++ ) {
            if ( $i ~ /^[TF]$/ ) {
                tag = $(i-1)
                val = $i
                if ( map[tag] == val ) {
                    $(i-1) = $i = ""
                }
                map[tag] = val
                i++
            }
        }
        $0 = $0
        $1 = $1
        print
    }
' file

おすすめ記事