Il modo più idiomatico per farlo awkè il seguente:
awk 'ORS=NR%2?FS:RS' file
Emette:
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
Per spiegarlo, dobbiamo definire ciascuna delle variabili incorporate:
RSseparatore di record. L'impostazione predefinita è \n(nuova riga).
ORSseparatore record di uscita. L'impostazione predefinita è \n(nuova riga).
FSseparatore di campo. Il valore predefinito è (spazio).
NR numero di record.
Poiché il separatore di record predefinito è la nuova riga, un record è, come impostazione predefinita, una riga.
NR%2è il modulo di NR/2, in modo che sia o 0o 1. 0per linee pari e 1per linee dispari.
var=condition?condition_if_true:condition_if_false è l'operatore ternario.
Tutti insieme, dicendo ORS=NR%2?FS:RSche stiamo definendo il separatore del record di output:
- se il numero di record è nel modulo
2k + 1, ovvero su linee pari, i separatori del record di output sono impostati su FSuno spazio.
- se il numero di record si trova sul modulo
2k, ovvero su righe dispari, i separatori di record di output vengono impostati su RSuna nuova riga.
In questo modo, le linee dispari terminano con uno spazio, che viene quindi unito alla linea successiva. Dopo quella linea, viene stampata una nuova linea.
Maggiori informazioni in Idiomatic awk .
trè interamente basato sui caratteri: hai chiesto a tr di rimuovere le nuove righe e tutte le "G", "r", "o", "u" e "p".