출력을 위해 파일에서 정보를 추출합니다. 파일 이름은 쉼표로 연결되고 구분됩니다.

출력을 위해 파일에서 정보를 추출합니다. 파일 이름은 쉼표로 연결되고 구분됩니다.

여러 파일이 포함된 일부 디렉터리가 있고 확장자가 .failed인 파일 수가 매일 변경됩니다. 파일의 형식은 다음과 같습니다.

파일 1. 실패:

FHEAD|4525|20170109000000|20170125024831
THEAD|150001021|20170109121206||
TDETL|4000785067||1|EA|||RETURN|||N
TTAIL|1
THEAD|150001022|20170109012801||
TDETL|4000804525||1|EA|||RETURN|||N
TTAIL|1
FTAIL|6

THEAD|와 |2 사이의 모든 텍스트를 출력 파일로 추출해야 합니다. 다음을 시도 중인데 디렉토리에 파일이 하나만 있는 경우에만 작동합니다.

sed -n 's:.*THEAD|\(.*\)|2.*:\1:p' <*.failed >transactions.log

출력은 다음과 같습니다: transaction.log:

150001021
150001022

이제 여러 파일에 대해 동일한 작업을 어떻게 수행할 수 있습니까? (파일 수는 미확인).

또한 아래와 같이 출력 파일의 각 줄에 파일 이름을 추가할 수 있나요?

예상 출력:

file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file2.failed,150001025
file2.failed,150001026
file3.failed,150001027
file3.failed,150001028

미리 감사드립니다.

답변1

( gawk및 로 테스트됨 mawk)

awk -F'|' '$1 == "THEAD" {print FILENAME, $2}' OFS=, file*.failed > transactions.log

cat transactions.log 
file1.failed,150001021
file1.failed,150001022
file2.failed,150001023
file2.failed,150001024
file3.failed,150001025
file3.failed,150001026

관련 정보