un comando bash genera esto:
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
Me gustaría canalizarlo a algo para que se vea así:
Runtime Name: vmhba2:C0:T1:L14 Group State: active
Runtime Name: vmhba3:C0:T3:L14 Group State: active unoptimized
Runtime Name: vmhba2:C0:T2:L14 Group State: active
[...]
es decir, eliminar cualquier otra línea nueva
Lo intenté ... |tr "\nGroup" " "
pero eliminó todas las líneas nuevas y se comió algunas otras letras también. Gracias
tr
está completamente basado en caracteres: solicitó a tr que elimine las nuevas líneas y todas las 'G', 'r', 'o', 'u' y 'p'.Respuestas:
no puedo probar en este momento, pero
Deberías hacerlo
fuente
paste -d ' ' - -
agregará un espacio en su lugar si es necesario)-
? Graciaspaste
se utiliza para concatenar correspondientes líneas de un fichero:paste file1 file2 file3 ...
. Si uno de los argumentos del "archivo" es "-", las líneas se leen desde la entrada estándar. Si hay 2 argumentos "-", pegar toma 2 líneas de stdin. Y así. Ver la página del manual .Una posibilidad es:
Si el número de línea es divisible por 2, termine con una nueva línea, de lo contrario, termine con un espacio.
(Probado en: CentOS 6, GNU Awk 3.1.7)
Usando sed (ver explicación ):
Otras lecturas:
fuente
Si desea usar
sed
, no hay razón para leer todo el archivo en la memoria. Puede fusionar cualquier otra línea como esta:Use cualquier personaje que desee en lugar del espacio.
Aquí hay otra forma de usar awk:
El
if/else
maneja el caso donde hay un número impar de líneas en el archivo. Sin ella, la última línea impar se imprime dos veces. De lo contrario, para comparar, podría hacer:fuente
awk '{printf "%s", $0; $0=""; getline; print " " $0}'
La forma más idiomática de hacerlo
awk
es la siguiente:Produce:
Para explicarlo, necesitamos definir cada una de las variables integradas:
RS
separador de registros El valor predeterminado es\n
(nueva línea).ORS
separador de registro de salida. El valor predeterminado es\n
(nueva línea).FS
separador 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%2
es el módulo deNR/2
, por lo que será0
o1
.0
para líneas pares y1
para líneas impares.var=condition?condition_if_true:condition_if_false
es el operador ternario.Todos juntos, diciendo
ORS=NR%2?FS:RS
que estamos definiendo el separador de registro de salida:2k + 1
, es decir, en líneas pares, entonces los separadores de registros de salida se establecen enFS
, es decir, un espacio.2k
, es decir, en líneas impares, entonces los separadores de registros de salida se establecen enRS
, 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 .
fuente
Esto funciona para mí en Linux:
Esto reemplaza un espacio vacío para un carácter de nueva línea; que debe escapar del carácter de nueva línea para que las cosas funcionen correctamente.
fuente
En bash:
fuente
Si Perl es una opción:
perl -pe 's/\n/ / if $. % 2 == 1' file
s/\n/ /
reemplaza nueva línea con espacio$.
es el número de líneafuente
¿Qué tal el uso
grep
?fuente