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

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

[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 
  • Как эхо в определенных нескольких файлах?
  • Печать нескольких полей на основе партиальной подстроки в одном из полей
  • Десятичный номер преобразования формы x.xx в 0x.xx, sed?
  • Как распечатать все, кроме Nth, до последней строки в sed?
  • как заменить разделитель между двумя другими разделителями в unix
  • Удалите все между вторым и вторым последним совпадением
  • Как читать файл по строкам и печатать предыдущую строку, в которой файл содержит один токен
  • Нам нужен список «C», который содержит все элементы «A», но не имеет ни одного из «B»,
  • Найдите строку, затем удалите два тега и повторите
  • поля фильтра в файле, без постоянного формата записи
  • Как анализировать файл, подобный этому, и определять переменные?
  • Interesting Posts

    добавить новую строку в файл с разделителями

    Отображение LOCALHOST

    Интерактивный поиск с помощью подстановочных знаков

    Отображать изображения в консоли (проклятия)?

    VMWare 12 продолжает запрашивать установку vmware-инструментов на гостевом компьютере Windows

    Рабочая среда рабочего стола, которая может привязывать рабочее пространство к внешнему монитору

    Узнайте, кто использует общий монтир?

    Смонтировать пул ZFS в качестве внутреннего диска

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

    Справочная документация по настройкам групп (групп управления)

    Будет ли автолог создавать проблемы с удаленной безопасностью?

    Подключить сетевой сетевой диск к Linux в другом домене

    C ++ компилируется в Arch Linux без пакета g ++ в репозиториях

    Кластерные серверы для запуска одного vm

    Как снова открыть процесс?

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