ファイルには、 | で区切られたキーと値のペアがあります。入力と出力に示すように、キーペアのスペースを削除するように求められます。例: UTC 時間オフセット -> UTCTimeOffset
他のsedとawkコマンドを試しましたが、正しいコマンドを取得できません
入力する:
LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTC Time = 1618334334.03|UTC Time Offset = 660 (EFT)|
出力:
LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTCTime = 1618334334.03|UTCTimeOffset = 660 (EFT)|
答え1
キーまたは値に組み込み文字|
または=
文字が含まれていないとします。
awk 'BEGIN { ORS = RS = "|"; OFS = FS = " =" }{ gsub(" ", "", $1) }; NF > 1' file
これは入力を-で区切られたレコードセットとして扱います|
。各レコードは=
(スペース+ =
)をフィールド区切り文字として使用します。
各履歴について、最初のフィールド(キー)のスペースは削除されますgsub()
。現在のレコードに複数のフィールドがある場合は印刷します(最後に空のレコードが出力されないようにするためのテストです)。
出力の末尾に改行文字がありません。
残念ながら、AIXではテストできませんが、非標準awk
機能を使用するようには見えません。
答え2
すべてのUnixシステムのすべてのシェルでawkを使用してください。
$ cat tst.awk
BEGIN { FS=OFS="|" }
{
for (i=1; i<NF; i++) {
key = val = $i
sub(/ *=.*/,"",key)
sub(/[^=]*= */,"",val)
gsub(/ /,"",key)
$i = key " = " val
}
print
}
$ awk -f tst.awk file
LogID = AMQ11111.0.FDC|Date/Time = Wed April 14 2021 03:19:43 EET|UTCTime = 1618334334.03|UTCTimeOffset = 660 (EFT)|
上記では、どのフィールドも含めることができず、|
各行がで始まると仮定します|
。