
Tengo el archivo1 cuyo contenido es así:
Las 6 columnas se obtienen de 6 hosts diferentes antes de presentarlas usando el comando "-exec cp". Esto es sólo para su información.
Ahora tengo una lista de 6 nombres de host (archivo2) que quiero agregar como primera fila al archivo1.
El contenido del archivo 2 se proporciona a continuación.
HOST1
HOST2
HOST3
HOST4
HOST5
HOST6
Necesito el resultado final como este.
Puedo agregar una columna pero no una fila.
Respuesta1
Aquí hay una forma:
awk -vhead="$(tr '\n' ' ' <file2)" 'BEGIN{print head}{print}' file1 > newfile
El tr
comando reemplaza las nuevas líneas con espacios, convirtiendo la "columna" en file2
una "fila". Esto se pasa awk
como la head
variable que se imprime antes que nada. Luego, simplemente se imprime cada línea del archivo de entrada.
Alternativamente, puedes hacer todo en awk
:
awk 'NR==FNR{printf "%s ",$0; next}FNR==1{print ""}1;' file2 file1 > newfile
NR
es el número de línea de entrada actual y FNR
el número de línea del archivo actual. Los dos serán iguales sólo mientras se lee el primer archivo. Imprimirá printf "%s ",$0; next
la línea actual sin al \n
final y pasará a la siguiente. Es FNR==1{print ""}
solo para agregar \n
después de que se haya impreso el encabezado y 1;
es awk
una abreviatura de "imprimir esta línea".
Respuesta2
( echo $(cat file2) ; cat file1 ) | column -t > file3