了解 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 > testnl -w 1 -p -s';' temp_file > test暗示透過谷歌)。

答案3

腳本會跳過所有行 (2.command),直到到達以;----------;(1.command) 開頭的行。然後,它會列印以下行,刪除無關的空格(4.命令),直到到達空行或不以;(3.命令)開頭的行

簡而言之:它會列印出由;----------;和 分隔的第一個區塊(空白行或不以 開頭的行;)。

相關內容