Используя переменные 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
и сохраняет имя диска в переменной. Разделитель полей меняется на =
, так как в строках Device и Shared Disk используется =
. При попадании в строку, соответствующую /shareddisk/
, переменные печатаются, а разделитель полей снова изменяется, чтобы соответствовать следующей строке физического диска.
Edit
Это предполагает формат файла:
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