awk를 사용하여 플랫 파일의 형식을 어떻게 지정합니까?

awk를 사용하여 플랫 파일의 형식을 어떻게 지정합니까?

다음은 단일 파일에 포함된 일부 테이블 데이터의 형식입니다.

;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;

(5436rowsaffected)
(returnstatus=0)

Returnparameters:

;;
;5436;


(1rowaffected)
;;;
;-------;-----------;
;grepkey;5436;

(1rowaffected)

메모:grepkey=5436(테이블에 있는 레코드 수).

다음은 예상되는 출력입니다.

1;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
2;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
5436;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;

위 형식의 데이터가 필요합니다. 행 번호 앞에 접두사를 붙이고 테이블의 레코드 수 등 파일 끝에 있는 추가 데이터를 제외하고 싶습니다.

또한 awk.

답변1

제가 정확하게 이해했는지 잘 모르겠습니다. 각 행에 줄 번호를 추가하고 첫 번째 빈 줄 이후의 모든 항목을 제거하고 싶다고 생각합니다. 그렇다면 이렇게 하면 됩니다:

awk '{if($1){print NR$0}else{exit}}' file 

설명

  • if($1){print NR$0}: 이 줄에 첫 번째 필드가 있으면(줄이 비어 있는지 확인하는 간단한 방법) 현재 줄 번호( NR)와 줄을 인쇄합니다 $0.
  • else{exit}: 첫 번째 빈 줄에서 스크립트를 중지합니다.

답변2

awk -v n=$( grep -oP '(?<=grepkey;)\d+' file ) 'NR <= n {print NR ";" $0}' file

여기서는 GNU grep 명령을 사용하여 파일에서 "grepkey" 값을 추출한 다음 awk 스크립트를 사용하여 파일의 첫 번째 "n" 줄을 인쇄하고 줄 번호가 앞에 붙습니다.

관련 정보