AWK를 사용하여 파일 병합

AWK를 사용하여 파일 병합

탭으로 구분된 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

관련 정보