Удалить пробелы и заголовки из таблицы базы данных.

Удалить пробелы и заголовки из таблицы базы данных.

Я выгрузил данные таблицы базы данных в плоский файл, и вот как они выглядят: (Пожалуйста, скопируйте снизу)

;metier_code              ;
;-------------------------;

(0 rows affected)
;CRDS_Ptf_No;          ;                                ;                         ;          ;                                ; ;                         ;                         ;               ;               ;               ;                         ;                         ;     ;Status;
;-----------;----------;--------------------------------;-------------------------;----------;--------------------------------;-;-------------------------;-------------------------;---------------;---------------;---------------;-------------------------;-------------------------;-----;------;
;       NULL;ABCD      ;ABHJARS                         ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
;       1234;XEU-ANKD  ;XEU-AJKD                        ;                         ;ABCD      ;ABCD                            ;Y;                         ;                         ;               ;               ;               ;                         ;                         ;     ;A     ;
.
.
;      11745;ANJLDMAOKD;AMKDJ AN DJ JAHF AS CPFVH ACCR  ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;
;      11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM   ;NONE                     ;AN DJ JAHA;AN DJ JAHA                      ;Y;NO ANKIO GAP             ;YES AMK SCF              ;               ;               ;               ;                         ;                         ;     ;I     ;

(5436 rows affected)
(return status = 0)

Return parameters:

;           ;
;-----------;
;       5436;


(1 row affected)
;       ;           ;
;-------;-----------;
;grepkey;       5436;

(1 row affected)

хотите преобразовать вышеуказанный формат в следующий:

Строка должна содержать последовательность no (префикс). Необходимо удалить имена столбцов и пробелы, присутствующие в исходном файле в начале и конце.

НИЖЕ ПРИВЕДЕН ФОРМАТ ДАННЫХ, КОТОРЫЕ Я ПОЛУЧАЮ, ИСПОЛЬЗУЯ ПРЕДЛОЖЕННЫЙ КОД:

awk -F ';' '/^;-----------;/ {start=1;next;};  start==0 {next;}; {gsub(" +",""); print NR "" $0;}' temp_file > test

ФОРМАТ после выполнения приведенного выше скрипта:

7;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
8;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
.
.
5443;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;
5444
5445(5436rowsaffected)
5446(returnstatus=0)
5447
5448Returnparameters:
5449
5450;;
5452;5436;
5453
5454
5455(1rowaffected)
5456;;;
5457;-------;-----------;
5458;grepkey;5436;
5459
5460(1rowaffected)

Выше: номер строки префикса не идет последовательно (увеличение с использованием предыдущих строк, которые не являются фактическими данными). Исходный файл содержал дополнительную информацию в плоском файле, такую ​​как имя столбца @ beginning, в конце файла несколько дополнительных деталей, которые мне были нужны, например, количество записей и т. д.

Мне нужны данные в следующем формате (который должен иметь префиксный номер строки и должен включать только строки таблицы, а не дополнительные предшествующие и превосходящие данные)

1;NULL;ABCD;ABHJARS;;ABCD;ABCD;Y;;;;;;;;;A;
2;NULL;XEU-ANKD;XEU-AJKD;;ABCD;ABCD;Y;;;;;;;;;A;
3;NULL;SWAPOLEIL;SWAPOLEIL;;QWERDF;QWERDF;Y;;;;;;;;;A;
.
.
5436;11744;AMKDIONSKH;AMKDJ AN DJ JAHF AS CPFVH MTM;;QWERDF;QWERDF;Y;;;;;;;;;A;

5436 - is the number of rows present in the table from where i am fetching the data.

решение1

awk -F ' *; *' \
  '{printf "%d;",NR; for(i=2;i<=NF;i++) printf "%s;",$i; print "";}' file

-Fустанавливает разделитель полей в регулярном выражении *; *(т.е. «точка с запятой с любым количеством (включая ноль) пробелов с обеих сторон»).

Или проще:

awk -F ' *; *' -v OFS=";" '{$1=NR; $(NF+1)=""; NF--; print}' file

$(NF+1)=""; NF--;просто принудительно выполняет пересчет, $0но теперь с измененным OFSразделителем полей.

Еще проще:

awk -F ';' '{gsub(" +",""); print NR "" $0;}' file

Если awkследует «обработать» (т.е. проигнорировать) также и ведущие строки:

awk -F ';' '/^;-----------;/ {start=1;next;}; 
  start==0 {next;}; /^[^;]|^$/ { exit;}; { line_nr++; gsub(" +",""); print line_nr "" $0;}' file

редактировать

Я не обратил достаточного внимания и забыл адаптировать номер строки в последнем примере. Поскольку прочитанные строки больше не совпадают с написанными (обычными), NR больше не может использоваться.

правка 2

Добавление /^[^;]|^$/ { exit;};останавливает обработку, если встречается строка, которая не начинается с ;.

решение2

Используя sedиawk

sed -e '/^; *NULL/ s/ *//g' file | sed -n '/^;NULL.*/,$p' | awk '{print NR$0}'
  • sed -e '/^; *NULL/ s/ *//g' file- Удаляет пробелы в строках, начинающихся с ; NLL.

  • sed -n '/^;NULL.*/,$p' - Удаляет все строки перед строкой, начинающейся с ; NULL.

  • awk '{print NR$0}' - печатает все строки, которым предшествует значение NR.

решение3

Я думаю, что даже sedи awkздесь может быть немного перебором.

grep '^;.*NULL' <<\DATA | tr -d '[:blank:]' | grep -n .

;metier_code              ;
;-------------------------;

(0 rows affected)
;CRDS_Ptf_No;          ;                                ;                         ;          ;
             ; ;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;Status;
;-----------;----------;--------------------------------;-------------------------;----------;--------------------------------;-;-------------------------;-------------------------;---------------;---------------;---------------;-------------------------;-------------------------;-----;------;
;       NULL;ABCD      ;ABCD                            ;                         ;ABCS      ;ABCS
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
;       NULL;PKG-ABCP  ;UEX-SWAP                        ;                         ;ABCS      ;ABCS
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
;       NULL;SWAPOLEIL ;SWAPOLEIL                       ;                         ;QWERDF    ;QWERDF
             ;Y;                         ;                         ;               ;               ;
  ;                         ;                         ;     ;A     ;
DATA

ВЫХОД

1:;NULL;ABCD;ABCD;;ABCS;ABCS;Y;;;;;;;;;A;
2:;NULL;PKG-ABCP;UEX-SWAP;;ABCS;ABCS;Y;;;;;;;;;A;
3:;NULL;SWAPOLEIL;SWAPOLEIL;;QWERDF;QWERDF;Y;;;;;;;;;A;

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