![파일 이름의 문자열을 출력 파일로 가져오고 동일한 파일 내의 문자열도 가져옵니다.](https://linux55.com/image/104557/%ED%8C%8C%EC%9D%BC%20%EC%9D%B4%EB%A6%84%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%B6%9C%EB%A0%A5%20%ED%8C%8C%EC%9D%BC%EB%A1%9C%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B3%A0%20%EB%8F%99%EC%9D%BC%ED%95%9C%20%ED%8C%8C%EC%9D%BC%20%EB%82%B4%EC%9D%98%20%EB%AC%B8%EC%9E%90%EC%97%B4%EB%8F%84%20%EA%B0%80%EC%A0%B8%EC%98%B5%EB%8B%88%EB%8B%A4..png)
확장자가 .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