awk を使用してフラット ファイルをフォーマットするにはどうすればよいですか?

awk を使用してフラット ファイルをフォーマットするにはどうすればよいですか?

以下は、1 つのファイル内に含まれるいくつかのテーブル データの形式です。

;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}: この行に 1 番目のフィールドがある場合 (行が空かどうかを確認する簡単な方法)、現在の行番号 ( NR) と行を出力します$0
  • else{exit}: 最初の空行でスクリプトを停止します。

答え2

awk -v n=$( grep -oP '(?<=grepkey;)\d+' file ) 'NR <= n {print NR ";" $0}' file

ここでは、GNU grep コマンドを使用してファイルから「grepkey」値を抽出し、次に awk スクリプトを使用してファイルの最初の「n」行を行番号を先頭に付けて出力します。

関連情報