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

相關內容