파일 이름의 문자열을 출력 파일로 가져오고 동일한 파일 내의 문자열도 가져옵니다.

파일 이름의 문자열을 출력 파일로 가져오고 동일한 파일 내의 문자열도 가져옵니다.

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

file1_string2_1.실패:

FHEAD|string2|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개 문자열을 쉼표로 구분된 출력 파일로 추출해야 합니다. 또한 이 출력 파일에 파일 이름과 string2를 추출해야 합니다. string2는 파일 이름이나 FHEAD 태그에서 사용할 수 있습니다.

예상 출력:

file1_string2_1.failed,string2,150001021,20170109121206
file1_string2_1.failed,string2,150001022,20170109012801
file2_string2_1.failed,string2,150001023,20170109100904
file2_string2_2.failed,string2,150001024,20170109031206
file2_string2_3.failed,string2,150001025,20170109081207
file3_string2_1.failed,string2,150001026,20170109141203
file3_string2_2.failed,string2,150001027,20170109121208
file4_string2_1.failed,string2,150001028,20170109171206

이제 다음 명령이 있습니다.

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

내가 얻는 결과는 다음과 같습니다.

file1_string2_1.failed,150001021
file1_string2_1.failed,150001022
file2_string2_1.failed,150001023
...

답변1

밑줄로 구분된 필드로 분할 FILENAME하고 결과를 배열에 넣을 수 있습니다.

split(FILENAME,a,"_")

print그런 다음 명령문 에 필요한 요소를 추가하십시오.

print FILENAME, a[2], $2, $3

그래서

awk -F'|' '$1 == "THEAD" {split(FILENAME,a,"_"); print FILENAME, a[2], $2, $3}' OFS=, *.failed > failed_transactions.out

관련 정보