
Eu tenho o arquivo1 cujo conteúdo é assim:
As 6 colunas são obtidas de 6 hosts diferentes antes de apresentá-las usando o comando "-exec cp". Isso é apenas para sua informação.
Agora, tenho uma lista de 6 nomes de host (arquivo2) que desejo adicionar como primeira linha ao arquivo1.
O conteúdo do arquivo2 é fornecido abaixo.
HOST1
HOST2
HOST3
HOST4
HOST5
HOST6
Eu preciso do resultado final assim.
Consigo adicionar uma coluna, mas não uma linha.
Responder1
Aqui está uma maneira:
awk -vhead="$(tr '\n' ' ' <file2)" 'BEGIN{print head}{print}' file1 > newfile
O tr
comando substitui novas linhas por espaços, convertendo a “coluna” em file2
uma “linha”. Isso é passado awk
como a head
variável que é impressa antes de qualquer outra coisa. Então, cada linha do arquivo de entrada é simplesmente impressa.
Alternativamente, você pode fazer tudo em awk
:
awk 'NR==FNR{printf "%s ",$0; next}FNR==1{print ""}1;' file2 file1 > newfile
NR
é o número da linha de entrada atual e FNR
o número da linha do arquivo atual. Os dois serão iguais apenas enquanto o primeiro arquivo estiver sendo lido. O printf "%s ",$0; next
irá imprimir a linha atual sem um \n
no final e pular para a próxima. É FNR==1{print ""}
apenas para adicionar um \n
após o cabeçalho ter sido impresso e 1;
é awk
uma abreviação para "imprimir esta linha".
Responder2
( echo $(cat file2) ; cat file1 ) | column -t > file3