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" 줄을 인쇄합니다.

관련 정보