2つの区切り記号の間のスペースを切り取る方法 - Unix

2つの区切り記号の間のスペースを切り取る方法 - Unix

ファイルには、 | で区切られたキーと値のペアがあります。入力と出力に示すように、キーペアのスペースを削除するように求められます。例: 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機能を使用するようには見えません。

おすすめ記事