以下の行では、次の形式の特定のフィールドのみが必要です。
031100000080,Z45G0001,09:43:08.5234999,09:43:09.7925597,0:1:269,737683
入力ライン:
17/05/2019 09:43:09.792559|TraceDetail |UPBSStandardGenericBillPaymentComponent.PostBillPaymentTransacti|Total Time [125456] |783562 [11] [25458] | Consumer Number [0345454545000 ] , UCID [Z456G0001] Sending Time [09:43:08.5234999] Receive Time [09:43:09.7925597] Total Time [0:1:269] STAN is [737683]
答え1
入力をパイプする
sed 's/][^[]*\[/,/g;s/\([^,]*,\)\{3\}//;s/ *,/,/;s/]$//'
s/][^[]*\[/,/g
[]
ほとんどの操作は、間にあるすべてを削除してコンマで区切って実行されます。s/\([^,]*,\)\{3\}//
未使用の最初のフィールドを削除してください。s/ *,/,/
役に立たないスペースを削除s/]$//'
最後に最後を削除]
修正する: ご意見によると、各行のフィールド数と順序が異なる場合があります。この場合のより一般的なアプローチは、各行にフィールド名を追加してループを繰り返してそのフィールドを抽出することです。
sed -e 'G;s/$/,Consumer Number,UCID,Sending Time,Receive Time,Total Time,STAN is,/;:loop' -e 's/ \(.*\) \[\([^] ]*\)\(.*\n.*,\)\1,/\3\2,/;tloop' -e 's/.*\n,//;s/,$//'
これが本当にあなたが望むものなら、より詳細な説明をすることができます。