La forma más idiomática de hacerlo awkes la siguiente:
awk 'ORS=NR%2?FS:RS' file
Produce:
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 explicarlo, necesitamos definir cada una de las variables integradas:
RSseparador de registros El valor predeterminado es \n(nueva línea).
ORSseparador de registro de salida. El valor predeterminado es \n(nueva línea).
FSseparador de campo El valor predeterminado es (espacio).
NR Número de registro.
Como el separador de registros predeterminado es la nueva línea, un registro es, por defecto, una línea.
NR%2es el módulo de NR/2, por lo que será 0o 1. 0para líneas pares y 1para líneas impares.
var=condition?condition_if_true:condition_if_false es el operador ternario.
Todos juntos, diciendo ORS=NR%2?FS:RSque estamos definiendo el separador de registro de salida:
- si el número de registros está en el formulario
2k + 1, es decir, en líneas pares, entonces los separadores de registros de salida se establecen en FS, es decir, un espacio.
- si el número de registro está en el formulario
2k, es decir, en líneas impares, entonces los separadores de registros de salida se establecen en RS, es decir, una nueva línea.
De esta manera, las líneas impares terminan con un espacio, que luego se une con la siguiente línea. Después de esa línea, se imprime una nueva línea.
Más información en Idiomatic awk .
trestá completamente basado en caracteres: solicitó a tr que elimine las nuevas líneas y todas las 'G', 'r', 'o', 'u' y 'p'.