транспонировать наборы из трех строк в столбцы

У меня есть файл, который имеет следующие записи:

[root@ovmm329 ovm_utils]# cat /tmp/disk.txt Physical Disk : 'IBM (67) device=/dev/mapper/360050768018206483000000000000453 shareddisk=true Physical Disk : 'IBM (58) device=/dev/mapper/36005076801820648300000000000043f shareddisk=true Physical Disk : 'IBM (59) device=/dev/mapper/360050768018206483000000000000440 shareddisk=true Physical Disk : 'IBM (71) device=/dev/mapper/360050768018206483000000000000497 shareddisk=true [root@ovmm329 ovm_utils]# 

Я пробовал использовать sed и awk всеми возможными способами, о которых я знаю, но не смог получить его в требуемом формате. Я хотел бы иметь файл в таком формате:

 Physical Disk device Shareddisk IBM (67) /dev/mapper/360050768018206483000000000000453 true IBM (58) /dev/mapper/36005076801820648300000000000043f true IBM (59) /dev/mapper/360050768018206483000000000000440 true IBM (71) /dev/mapper/360050768018206483000000000000497 true 

One Solution collect form web for “транспонировать наборы из трех строк в столбцы”

Используя переменные awk и несколько совпадений, вы можете прочитать каждую строку, сохранить то, что вам нужно, а затем распечатать в последнем матче и начать все заново.

 #!/usr/bin/awk -f BEGIN { DISK="" DEVICE="" FS=" : " print "Physical Disk\tdevice\t\t\t\t\t\tShareddisk" } /Physical Disk/ { DISK=$2 FS="=" } /device/ { DEVICE=$2 } /shareddisk/ { print DISK "\t" DEVICE "\t" $2 FS=" : " } 

Затем запустите скрипт против вашего файла awk -f ./script.awk ./disk.txt

 $ awk -f ./parse.awk ./disk.txt Physical Disk device Shareddisk 'IBM (67) /dev/mapper/360050768018206483000000000000453 true 'IBM (58) /dev/mapper/36005076801820648300000000000043f true 'IBM (59) /dev/mapper/360050768018206483000000000000440 true 'IBM (71) /dev/mapper/360050768018206483000000000000497 true 

Чтобы разбить скрипт, он начинается с блока BEGIN который запускается с самого начала. Он определяет некоторые переменные и устанавливает полевой разделитель FS и печатает заголовок. Первое совпадение – для Physical Disk и сохраняет имя диска для переменной. Полевой разделитель изменен на = поскольку используются строки устройства и общего диска = . Когда /shareddisk/ совпадение строк /shareddisk/ , переменные печатаются, а полевой разделитель снова изменяется для соответствия следующей строке физического диска.

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

Предполагается, что формат файла:

 cat disk.txt Physical Disk : 'IBM (67) device=/dev/mapper/360050768018206483000000000000453 shareddisk=true Physical Disk : 'IBM (58) device=/dev/mapper/36005076801820648300000000000043f shareddisk=true Physical Disk : 'IBM (59) device=/dev/mapper/360050768018206483000000000000440 shareddisk=true Physical Disk : 'IBM (71) device=/dev/mapper/360050768018206483000000000000497 shareddisk=true 
  • как удалить некоторые из строк в первом файле на основе информации из второго файла?
  • Как извлечь время из текстового файла в другой текстовый файл / список
  • Выбор строки из шаблона, замена новой строки и увеличение количества для каждого изменения
  • Заменить неизвестную строку с помощью sed в сценарии bash
  • Строки Grep до после, если значение строки больше нуля
  • Вставка пространства после 5 символов при подсчете обратного
  • удаляя каждый. после] появляются в строке в полном текстовом файле
  • Десятичный номер преобразования формы x.xx в 0x.xx, sed?
  • Как подсчитать количество символов в каждой строке?
  • Удалите все пробелы после определенного слова
  • Команда для поиска строки внутри шаблона
  • Удалите символы, если они не соответствуют указанным шаблонам
  • Interesting Posts

    Самый простой способ отправить почту с вложением изображения из командной строки с помощью gmail?

    Что происходит, когда я копирую файл из одного сетевого местоположения в другое

    Использовать-резервную сетевую оболочку (сеть приятно)

    Как установить новый дистрибутив Linux на существующие зашифрованные разделы?

    Обновление Redmine не находит зависимости от мокки

    Найдите любые линии, превышающие определенную длину

    Альтернативы оконному менеджеру FVWM?

    Google Compute Engine – подождите, пока служба systemd не выйдет с 0 при выключении

    CentOS на HyperV – eth0 не в ifconfig?

    Проблема с SSH «Ошибка записи: поврежденная труба»

    Проблема в привязке с 4 видами

    Zsh перенаправляет на / dev / null и pipe

    Как удалить недействительный osd в кластере ceph?

    Диспетчер файлов, показывающий скорость передачи битов для mp3-файлов

    Лучшая файловая система для слияния с разными дисками формата / скорости?

    Linux и Unix - лучшая ОС в мире.