A maneira mais idiomática de fazer isso awké a seguinte:
awk 'ORS=NR%2?FS:RS' file
Emite:
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
Para explicá-lo, precisamos definir cada uma das variáveis internas:
RSseparador de registros. O padrão é \n(nova linha).
ORSseparador de registros de saída. O padrão é \n(nova linha).
FSseparador de campo. O padrão é (espaço).
NR número de registro.
Como o separador de registros padrão é a nova linha, um registro é, como padrão, uma linha.
NR%2é o módulo de NR/2, de modo que será ou 0ou 1. 0para linhas 1pares e linhas ímpares.
var=condition?condition_if_true:condition_if_false é o operador ternário.
Todos juntos, dizendo ORS=NR%2?FS:RSque estamos definindo o separador de registros de saída:
- se o número de registros estiver no formulário
2k + 1, ou seja, em linhas pares, os separadores de registros de saída serão configurados para FS, ou seja, um espaço.
- se o número de registros estiver no formulário
2k, ou seja, em linhas ímpares, os separadores de registros de saída serão configurados para RS, ou seja, uma nova linha.
Dessa forma, as linhas ímpares terminam com um espaço, que é então unido à próxima linha. Após essa linha, uma nova linha é impressa.
Mais informações no Idiomatic awk .
tré inteiramente baseado em caracteres: você pediu a tr para remover novas linhas e todos os 'G', 'r', 'o', 'u' e 'p'.