Combine tres archivos en un solo archivo maestro al excluir el encabezado en el segundo y tercer archivos

8

Tengo tres archivos con n número de líneas como se indica a continuación

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

Necesito fusionar estos tres archivos en un solo archivo (Master.txt) excluyendo los encabezados (Primeras 3 líneas) en Sample2.txt y Sample3.txt como se muestra a continuación

Salida deseada

$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: en la máquina AIX con Ksh 88

RAM
fuente
44
Probablemente esto se haga mejor mediante programación. Posiblemente usando Python y Perl. Si hace estas cosas con frecuencia, podría considerar el uso de R. R le permitirá importar los archivos individuales como marcos de datos, y luego puede fusionar los marcos de datos. Creo que los pandas de Python, por ejemplo, ofrecen una funcionalidad similar, pero no la he usado.
Faheem Mitha
@FaheemMitha Perl / Python es ciertamente excesivo para esto. Además, Python en AIX puede ser un poco problemático.
Peter
@ Peter Bueno, tal vez. Pero si tiene que hacer tales manipulaciones con frecuencia, entonces el enfoque R tiene mucho que recomendar. Aunque no tengo idea sobre el estado actual de R en AIX. Aunque R de casi cualquier cosecha debería poder hacer este tipo de manipulaciones.
Faheem Mitha
1
@FaheemMitha ¿por qué demonios recomendarías R para esto? Todo lo que el OP necesita es eliminar las 3 líneas superiores de todos menos el primer archivo. Dada la interfaz fuertemente basada en texto de UNIX, es un trabajo para las utilidades estándar.
Peter
1
@peterph Bueno, no es necesario para esta manipulación en particular, pero parece que el póster tiene que manipular tablas de texto, y en general R es una buena manera de hacerlo, y probablemente se adapta mejor a situaciones más complejas. Un enfoque alternativo del uso de herramientas Unix es ciertamente factible. No estoy sugiriendo que sea un mal camino a seguir.
Faheem Mitha

Respuestas:

18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt
Stéphane Chazelas
fuente
@Stephane Chazelas: Lamenta el comentario anterior. Gracias funciona perfectamente como se esperaba .. !!!
Ram
1
@ram tail -n +4significa que, independientemente del tamaño del archivo, se excluyen las 3 líneas superiores. Acabo de probarlo con un fie de 10 líneas. No mezcle el "4" aquí con el hecho de que su muestra tiene 4 líneas. Eso es básicamente una coincidencia.
Michael Durrant
@ram :) para completar, headtiene una opción similar: -n -Ximprimirá todas menos las últimas X líneas.
Peter
2
@peterph, no en AIX, no en la especificación POSIX (solo se permiten números positivos)
Stéphane Chazelas
Hm, mi mal ... esta es una extensión de GNU.
Peter
7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt
Peterph
fuente
2
+1 pero ¿podrías agregar un poco de explicación? ¿Qué hace la ${}sintaxis sed?
terdon
Eso no es ${}, pero "hacer {...}en las líneas 4 para durar"; elimina las líneas coincidentes, pero solo después de que haya pasado el primer encabezado. Sin embargo, el uso de la cola es más general y más robusto.
alexis
@terdon como se dijo, {}es una agrupación de comandos.
Peter
@alexis depende de lo que quieras al final. Una de las ventajas (aunque no es tan importante en estos días) es que solo genera un proceso. Además, puede convertirlo fácilmente en un guión #!/bin/sedsiendo el intérprete.
Peter