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

Не будучи пользователем CentOS, я не могу сказать почему /tmp/cdrom существовал бы во-первых, но это кажется странным. По-видимому, это была символьная ссылка на узел физического устройства. Вы могли бы попробовать grep -R cdrom /etc/udev/ видеть, настроил ли кто-то это.

Существует, вероятно, параллельная символьная ссылка в /dev/cdrom, таким образом, необходимо смочь использовать это вместо этого.

2
09.03.2019, 16:02
3 ответа

Используя 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
27.01.2020, 21:53

Я думаю, что даже 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

OUTPUT

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;
0
27.01.2020, 21:53
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

edit

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

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

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

4
27.01.2020, 21:53

Теги

Похожие вопросы