Ниже представлен формат некоторых табличных данных, содержащихся в одном файле:
;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» строк файла с добавленным в начало номером строки.