Concatena vários arquivos com um cabeçalho comum

4

Eu tenho vários arquivos de texto, e o conteúdo de cada arquivo é como

attribute1,attribute2,...
1,2,...

As primeiras linhas que descrevem os nomes das colunas são as mesmas em todos os arquivos.

Eu quero concatenar as segundas linhas dos arquivos, adicionar uma nova coluna com nome de arquivo para cada linha de qual arquivo vem, e colocar uma das primeiras linhas como a primeira linha do novo arquivo. Por exemplo, o novo arquivo desejado se parece com:

file,attribute1,attribute2,...
file1,1,2,...
file2,11,12,...
file3,21,22,...

Como devo fazer isso?

    
por Tim 13.11.2015 / 20:37

3 respostas

4

Para adicionar o nome do arquivo, com awk :

awk -v OFS=, 'NR==1{print "file", $0};FNR==2{print FILENAME, $0}' file1 file2 ... fileN >outfile

que imprime o cabeçalho atualizado se for a primeira linha de entrada ( NR==1 ) ou ( || ) se for a segunda linha de cada arquivo ( FNR==2 ), ele imprime FILENAME e a linha ( $0 ).

Resposta inicial antes da sua edição.
Você poderia fazer isso com sed :

sed -n '1p;n;p' file1 file2 ... fileN >outfile

o -n suprime a impressão, 1p imprime a primeira linha e, em seguida, para cada linha (ímpar), esvazia o espaço do padrão e lê a linha n ext (as linhas pares) e p aperta isso.

    
por 13.11.2015 / 20:47
2
{   printf file,; head -n1 <file
    grep -n '' ./file* /dev/null|
    sed -ne'/^[^:]*:2:/s/:.:/,/p'
}   >./new_file

grep irá obter seus nomes de arquivos na cabeça de cada linha, e pode auxiliar na seleção por linha - n umber também. isso provavelmente não funcionará muito bem, no entanto, se você tiver dois pontos em seus nomes de arquivo.

    
por 13.11.2015 / 21:08
1

com tail

cat file1.txt && tail -q -n +2 file2.txt file3.txt ..
    
por 13.11.2015 / 20:51