Mesclar três arquivos em um único arquivo mestre excluindo o cabeçalho nos arquivos 2 e 3

8

Eu tenho três arquivos com n número de linhas, como indicado abaixo

sample1.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
.
.
.

Sample2.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
.
.
.

Sample3.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick
.
.
.

Preciso mesclar esses três arquivos em um único arquivo (Master.txt) excluindo os cabeçalhos (3 primeiras linhas) em Sample2.txt e Sample3.txt, conforme indicado abaixo

Saída desejada

$cat Master.txt

------------------------------
Date        Time    Name    
------------------------------
2013/10/12  12:09:09    Krish
2013/10/12  13:12:01    Ramb
2013/10/12  15:28:39    Likha
2013/10/12  15:56:12    Mat
2013/10/12  11:19:21    Jack
2013/10/12  12:11:09    Rob
2013/10/12  15:45:12    Rick
2013/10/12  22:11:10    Phil
2013/10/12  12:09:09    Eric
2013/10/12  13:12:01    Bob
2013/10/12  15:28:39    Mike
2013/10/12  15:56:12    Nick

Nota: Na máquina AIX com Ksh 88

RAM
fonte
4
Provavelmente, isso é melhor feito programaticamente. Possivelmente usando Python e Perl. Se você estiver fazendo essas coisas com frequência, considere usar R.R permitirá importar os arquivos individuais como quadros de dados e, em seguida, você pode mesclar os quadros de dados. Acredito que os pandas do Python, por exemplo, oferecem funcionalidade semelhante, mas eu não o usei.
Faheem Mitha 07/11
O @FaheemMitha Perl / Python certamente é um exagero para isso. Além disso, o Python no AIX pode ser um pouco problemático.
Peterph
@ Peter Bem, talvez. Mas se ele tiver que fazer essas manipulações com frequência, a abordagem R tem muito a recomendar. Embora eu não tenha idéia do status atual de R no AIX. Embora R de praticamente qualquer safra seja capaz de fazer esse tipo de manipulação.
FaHememit Mitha #
1
@FaheemMitha, por que você recomendaria o R para isso? Tudo o que o OP precisa é remover as três linhas superiores, exceto o primeiro arquivo. Dada a interface fortemente baseada em texto do UNIX, é um trabalho para os utilitários padrão.
Peterph
1
@ peterph Bem, não é necessário para essa manipulação específica, mas parece que o pôster precisa manipular tabelas de texto e, em geral, R é uma boa maneira de fazê-lo, e provavelmente se adapta melhor a situações mais complexas. Uma abordagem alternativa do uso de ferramentas unix é certamente viável. Não estou sugerindo que esse seja um mau caminho a percorrer.
FaHememit Mitha #

Respostas:

18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt
Stéphane Chazelas
fonte
@ Stephanie Chazelas: lamenta o comentário anterior. Obrigado, funciona perfeitamente como esperado .. !!!
Ram
1
@ram tail -n +4significa que, independentemente do tamanho do arquivo, as 3 principais linhas são excluídas. Eu apenas tentei com 10 linhas fie. Não misture o "4" aqui com o fato de que sua amostra possui 4 linhas. Isso é basicamente uma coincidência.
Michael Durrant
@ram :) para completar, headtem uma opção semelhante: -n -Ximprimirá todas, exceto as últimas X linhas.
Peterph
2
@peterph, não no AIX, não na especificação POSIX (apenas números positivos permitido)
Stéphane Chazelas
Hm, meu mal ... esta é uma extensão GNU.
Peterph
7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt
peterph
fonte
2
+1, mas você poderia adicionar uma explicação? O que a ${}sintaxe faz sed?
terdon
Não é ${}, mas "faça {...}nas linhas 4 para durar"; remove as linhas correspondentes, mas somente após a passagem do primeiro cabeçalho. O uso da cauda é mais geral e mais robusto.
Alexis
@terdon como dito, {}é um agrupamento de comandos.
Peterph
@alexis depende do que você deseja no final. Uma das vantagens (não tão importante nos dias de hoje) é que ela gera apenas um processo. Além disso, você pode facilmente transformá-lo em um script #!/bin/sedcomo intérprete.
Peterph