Unire tre file in un unico file principale escludendo l'intestazione nel 2 ° e 3 ° file


8

Ho tre file con n numero di righe come indicato di seguito

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
.
.
.

Devo unire questi tre file in un singolo file (Master.txt) escludendo le intestazioni (prime 3 righe) in Sample2.txt e Sample3.txt come indicato di seguito

Uscita desiderata

$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: in macchina AIX con Ksh 88


4
Questo è probabilmente meglio programmato. Forse usando Python e Perl. Se stai facendo queste cose frequentemente, potresti considerare l'utilizzo di R. R ti consentirà di importare i singoli file come frame di dati, quindi puoi unire i frame di dati. Credo che i panda di Python, ad esempio, offrano funzionalità simili, ma non l'ho usato.
Faheem Mitha,

@FaheemMitha Perl / Python è sicuramente eccessivo per questo. Inoltre Python su AIX potrebbe essere leggermente problematico.
peterph

@peterph Beh, forse. Ma se deve fare spesso tali manipolazioni, l'approccio R ha molto da consigliarlo. Anche se non ho idea dello stato attuale di R su AIX. Sebbene R di praticamente qualsiasi annata dovrebbe essere in grado di fare questo tipo di manipolazioni.
Faheem Mitha,

1
@FaheemMitha perché mai consiglieresti R per questo? Tutto ciò che serve all'OP è rimuovere le 3 righe più in alto da tutte tranne il primo file. Data l'interfaccia basata su testo fortemente UNIX, funziona con le utility standard.
peterph

1
@peterph Bene, non è necessario per questa particolare manipolazione, ma sembra che il poster abbia bisogno di manipolare le tabelle di testo, e in generale R è un buon modo per farlo, e probabilmente si adatta meglio a situazioni più complesse. Un approccio alternativo all'utilizzo degli strumenti unix è certamente fattibile. Non sto suggerendo che sia una brutta strada da percorrere.
Faheem Mitha,

Risposte:


18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt

@Stephane Chazelas: rimpianti per il commento precedente. Grazie funziona perfettamente come previsto .. !!!
Ram

1
@ram tail -n +4significa che, indipendentemente dalla dimensione del file, vengono escluse le prime 3 righe. L'ho appena provato con un fie da 10 righe. Non confondere il "4" qui con il fatto che il tuo campione ha 4 righe. Questa è sostanzialmente una coincidenza.
Michael Durrant,

@ram :) per completezza, headha un'opzione simile: -n -Xstamperà tutto tranne le ultime X righe.
peterph

2
@peterph, non su AIX, non nelle specifiche POSIX (sono ammessi solo numeri positivi)
Stéphane Chazelas

Mio male ... questa è un'estensione GNU.
peterph

7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt

2
+1 ma potresti aggiungere un po 'di spiegazione? Cosa fa la ${}sintassi sed?
terdon

Non è così ${}, ma "do {...}on line 4 to last"; rimuove le righe corrispondenti, ma solo dopo che è passata la prima intestazione. L'uso della coda è però più generale e più robusto.
alexis,

@terdon come detto, {}è il raggruppamento di comandi.
peterph

@alexis dipende da cosa vuoi alla fine. Uno dei vantaggi (non così importante oggigiorno) è che genera solo un processo. Inoltre puoi facilmente renderlo uno script con #!/bin/sedl'interprete.
peterph
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.