AWK 스크립트 이해

AWK 스크립트 이해

플랫 파일 형식:

;metier_code              ;
;-------------------------;

(0 rows affected)
;CRDS_Ptf_No;          ;                                ;                         ;          ;                                ; ;                         ;                         ;               ;               ;               ;                         ;                         ;     ;Status;
;-----------;----------;--------------------------------;-------------------------;----------;--------------------------------;-;-------------------------;-------------------------;---------------;---------------;---------------;-------------------------;-------------------------;-----;------;
;       NULL;ABCD      ;ABHJARS                         ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
;       1234;XEU-ANKD  ;XEU-AJKD                        ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
.
.
;      11745;ANJLDMAOKD;AMKDJ AN DJ JAHF AS CPFVH ACCR  ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;
;      11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM   ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;

(5436 rows affected)
(return status = 0)

Return parameters:

;           ;
;-----------;
;       5436;


(1 row affected)
;       ;           ;
;-------;-----------;
;grepkey;       5436;

(1 row affected)

아래 스크립트는 플랫 파일의 형식을 지정하는 데 사용됩니다.

awk -F ';' '/^;-----------;/ {start=1;next;}; start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' temp_file > test

다음은 위의 스크립트를 사용하여 얻은 올바른 출력입니다.

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

누구든지 파일 형식을 지정하는 데 사용되는 아래 AWK 스크립트를 설명해주세요.

awk -F ';' '/^;-----------;/ {start=1;next;}; start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' temp_file > test

위 스크립트에서 몇 가지 사항을 이해할 수 있었습니다. 1) /^[^;]|^$/ {exit;}; 로 시작하지 않는 행이 발생하면 처리를 중지합니다. 2) 주요 라인을 무시하고 있습니다.

답변1

Awk 스크립트는 한 줄에 하나의 조건으로 형식을 지정하면 훨씬 이해하기 쉽습니다.

'/^;-----------;/ {start=1;next;};

";----------;"로 시작하는 행을 읽을 때 변수 start를 true로 설정한 후 아무것도 인쇄하지 않고 다음 입력 행으로 이동합니다.

start==0 {next;};

start가 false이면 아무것도 인쇄하지 않고 다음 입력 줄로 이동합니다.

/^[^;]|^$/ { exit;};

또는 비어 있는 문자 이외의 문자로 시작하는 줄을 ;읽으면 파일 처리를 중지하고 종료합니다(더 간단한 방법은 !/^;/{exit}).

{ line_nr++; gsub(" +",""); print line_nr "" $0;}

다른 모든 줄의 경우 카운터를 늘리고 줄에서 모든 공백을 삭제한 다음 카운터와 업데이트된 줄을 인쇄합니다.

답변2

awk -F ';' '/^;-----------;/ {start=1;next;}; start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' temp_file > test의 복잡한 버전인 것 같습니다 nl -w 1 -p -s';' temp_file > test(힌트Google을 통해).

답변3

스크립트는 (1. command)로 시작하는 줄이 나올 때까지 모든 줄(2. command)을 건너뜁니다 ;----------;. 그런 다음 빈 줄이나 시작하지 않는 줄 ;(3. 명령) 에 도달할 때까지 불필요한 공백을 제거하여(4. 명령) 다음 ​​줄을 인쇄합니다.

즉, ;----------;and로 구분된 첫 번째 블록을 인쇄합니다(빈 줄 또는 로 시작하지 않는 줄 ;).

관련 정보