Você pode usar awk
aqui:
awk 'FNR==1{ header=$0;next} {print >"file"header}' filexx*
Produzirá um ou mais novos arquivos de concatenação com os mesmos cabeçalhos na primeira linha:
$ cat file1945
Zenon
$ cat file1950
Frank
Church
James
McClure
Bob
Explicações incluindo citações de awk
documentação :
A variável predefinida predefinida FNR
é o número atual do registro no arquivo atual. awk
incrementos FNR
cada vez que ler um novo registro (consulte Registros ) . awk
redefine FNR
para zero toda vez que inicia um novo arquivo de entrada. Então, quando fazemos FNR==1
significa que só tomamos medidas e obtemos essa linha quando é a primeira linha do arquivo atual e salvamos seu conteúdo em uma variável chamada header
.
As instruções next
awk
para parar imediatamente o processamento do registro atual e passar para o próximo registro. Isso significa que nenhuma regra adicional é executada para o registro atual e o restante da ação da regra atual não é executada, portanto, da próxima vez FNR!=1
e isso fará com que awk
execute o próximo bloco que é redirecionando o print
output (registros / linhas) para o arquivo chamado file####
( ####
irá substituir com o valor da variável header
, lembre-se que você precisa ter citado a parte do nome do arquivo que é uma string .
Usamos o redirecionamento single - ' >
' aqui. Quando esse tipo de redirecionamento é usado, o arquivo de saída é apagado antes que a primeira saída seja gravada nele. As gravações subseqüentes no mesmo arquivo de saída não apagam arquivo de saída , mas são anexadas a ele. (Isso é diferente de como você usa redirecionamentos em scripts de shell.) Se arquivo de saída não existir, ele será criado.