了解 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.命令)开头的行

简而言之:它打印出由;----------;和 分隔的第一个块(空行或不以 开头的行;)。

相关内容