아래 줄에서는 다음 형식의 특정 필드만 필요합니다.
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/,$//'
이것이 정말로 당신이 원하는 것이라면, 더 자세한 설명을 드릴 수 있습니다.