플랫 파일 형식:
;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;};
또는 null 이외의 문자로 시작하는 줄을 에서 읽으면 ;
파일 처리를 중지하고 종료합니다(더 간단한 방법은 !/^;/{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.command)로 시작하지 않는 줄에 도달할 때까지 불필요한 공백(4.command)을 제거하여 다음 줄을 인쇄합니다.
;----------;
즉, 및로 구분된 첫 번째 블록(빈 줄 또는 로 시작하지 않는 줄 ;
) 을 인쇄합니다 .