このヘッダーの名前を指定する方法はわかりませんが、私が得たものは次のとおりです。
次のテキストを含むファイル:
[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