сценарий оболочки для преобразования строк в столбцы - PullRequest
0 голосов
/ 30 мая 2020

У меня есть текстовый файл в следующем формате

 Type: XTREMIO
  UID: 51,4f,0c,51,9d,00,05,22
  Vendor: XtremIO
  Product: XtremApp
  Size: 10.00 GB
  Name: knocknarea_jounal
  Replication info: [rpa_A, RPA_B, knocknarea_jounal]
  Array Serial: CKM00150400153
  RPA To volume paths map: None



 Type: XTREMIO
  UID: 51,4f,0c,51,9d,00,05,28
  Vendor: XtremIO
  Product: XtremApp
  Size: 5.00 GB
  Name: test_rep
  Replication info: N/A
  Array Serial: CKM00150400153
  RPA To volume paths map: None

Моя цель - преобразовать этот блок в строку, подобную этой, с разделителем:

XTREMIO;51,4f,0c,51,9d,00,05,28;XtremIO;XtremApp;5.00 GB;test_rep;CKM00150400153

1 Ответ

1 голос
/ 30 мая 2020

Обычно вам следует опубликовать написанный вами код, чтобы знать, даже если он не работает, чтобы мы могли помочь вам, а не работать вместо вас.

Однако есть тривиальное решение, вызывающее awk дважды. Предполагая, что ваш входной файл называется input, вы можете попробовать /

awk 'BEGIN{FS = ": "}{print $2}' input | awk 'BEGIN{RS = ""; FS = "\n"; OFS = ";"}{print $1, $2, $3, $4, $5, $6, $8}'

Вывод:

XTREMIO;51,4f,0c,51,9d,00,05,22;XtremIO;XtremApp;10.00 GB;knocknarea_jounal;CKM00150400153
XTREMIO;51,4f,0c,51,9d,00,05,28;XtremIO;XtremApp;5.00 GB;test_rep;CKM00150400153

Объяснение: первый экземпляр awk удаляет все в начале каждую строку до строки ": " включительно.

Второй использует режим абзаца awk, устанавливая разделитель записей RS на пустую строку, что означает, что запись представляет собой каждый набор строк без пустой строки, и устанавливает разделитель полей FS до символа новой строки. Он считывает записи и выводит поля как есть, но меняет разделитель полей и разделитель записей на соотв. ";" и один символ новой строки (опция по умолчанию для ORS).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...