![AWK를 사용하여 파일 병합](https://linux55.com/image/116176/AWK%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%ED%8C%8C%EC%9D%BC%20%EB%B3%91%ED%95%A9.png)
탭으로 구분된 179개의 텍스트 파일이 포함된 폴더가 있습니다. 모두 동일한 형식을 갖습니다. 다음은 샘플 데이터에 대한 링크입니다.
http://www.mvabl.com/public/sample_data.txt
(이 예에는 내가 원하는 헤더 5개, 데이터 행 5개, 그리고 내가 수행한 모든 후행 데이터가 있습니다.아니요생각하다. )
처음 4개의 헤더 행을 완전히 제거한 다음 다섯 번째 행을 후행 데이터를 제외하고 결합된 데이터의 단일 파일에 있는 모든 행의 헤더로 사용하고 싶습니다.
또한 파일 이름 필드와 Prelim 4의 값이라는 두 개의 필드를 추가하고 싶습니다. 따라서 출력은 다음과 같습니다.
Filename Curr Storefront Name Identifier M-Type Quantity Net Amt Net Amt Total Code Title Item A-Type B-Type Vendor_ID Offline Indicator company donotuse
file1 ZAR ZA 44056971 Family Monthly PAID 1 .061038 .061038 US3E40400141 subtitle1 person 1 1 US3E40400141 1 BlueMelon
file2 ZAR ZA 44056975 Family Monthly PAID 1 .061038 .061038 US3E40400142 subtitle2 person2 1 1 US3E40400142 1 BlueMelon
file3 ZAR ZA 44057007 Family Monthly PAID 1 .061038 .061038 US3E40400144 subtitle3 person3 1 1 US3E40400144 1 BlueMelon
...
file179 ZAR ZA 44057330 Family Monthly PAID 1 .061038 .061038 US3E40400107 subtitle5 person5 1 1 US3E40400107 1 BlueMelon
저는 쉘 스크립팅을 처음 접했습니다. 정확히는 1주일 간의 경험입니다.
첫 번째 필드를 추가하기 위해 여기까지 왔지만 막혔습니다.
gawk 'NR==5;FNR>5 {print FILENAME,"\t",$0} /Row/ {f=0; nextfile} f' *.txt > result.txt
두 번째 필드(예비 데이터 4의 값)를 추가하는 방법을 모르겠습니다.
도움이 필요하세요? 감사해요!
답변1
awk 'FNR == 4 { pd4=$2; };
NR == 5 { print $0 " FILENAME PD4";};
FNR == 6 { print $0 " " FILENAME " " pd4; nextfile; }' file1 file2
답변2
GNU awk가 있는 것 같으니 그건 어떻습니까?
gawk '
/^Row Count/ {nextfile}
NR == 5 {$0 = "Filename" OFS $0; print}
FNR > 5 {$0 = FILENAME OFS $0; print}
' OFS='\t' *.txt