여러 파일이 포함된 일부 디렉터리가 있고 확장자가 .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