如何使用 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”行,并在前面添加行号。

相关内容