Не будучи пользователем CentOS, я не могу сказать почему /tmp/cdrom
существовал бы во-первых, но это кажется странным. По-видимому, это была символьная ссылка на узел физического устройства. Вы могли бы попробовать grep -R cdrom /etc/udev/
видеть, настроил ли кто-то это.
Существует, вероятно, параллельная символьная ссылка в /dev/cdrom
, таким образом, необходимо смочь использовать это вместо этого.
Используя 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.
Я думаю, что даже 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;
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;};
останавливает обработку, если появляется строка, которая не начинается с ;
.