Наиболее идиоматический способ сделать это awkзаключается в следующем:
awk 'ORS=NR%2?FS:RS' file
Это выводит:
Runtime Name: vmhba2:C0:T3:L14 Group State: active
Runtime Name: vmhba3:C0:T0:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T1:L14 Group State: active unoptimized
Runtime Name: vmhba3:C0:T3:L14 Group State: active
Runtime Name: vmhba2:C0:T2:L14 Group State: active
Чтобы объяснить это, нам нужно определить каждую из встроенных переменных:
RSразделитель записей. По умолчанию \n(новая строка).
ORSразделитель выходной записи. По умолчанию \n(новая строка).
FSразделитель полей. По умолчанию (пробел).
NR номер записи.
Поскольку разделителем записей по умолчанию является новая строка, запись по умолчанию является строкой.
NR%2является модулем NR/2, так что это будет либо 0или 1. 0для четных и 1нечетных линий.
var=condition?condition_if_true:condition_if_false является троичным оператором.
Все вместе говорят, что ORS=NR%2?FS:RSмы определяем разделитель выходной записи:
- если номер записи указан в форме
2k + 1, то есть в четных строках, то в качестве разделителей выходной записи устанавливается FSпробел.
- если номер записи указан в форме
2k, то есть в нечетных строках, то в качестве разделителей выходных записей устанавливается RSновая строка.
Таким образом, нечетные строки заканчиваются пробелом, который затем соединяется со следующей строкой. После этой строки печатается новая строка.
Больше информации в Idiomatic awk .
trполностью на основе символов: вы попросили tr удалить символы новой строки и все 'G', 'r', 'o', 'u' и 'p'.