Как отформатировать плоский файл с помощью 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}: если в этой строке есть 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» строк файла с добавленным в начало номером строки.

Связанный контент