Führen Sie drei Dateien zu einer einzigen Masterdatei zusammen, indem Sie den Header in der 2. und 3. Datei ausschließen

8

Ich habe drei Dateien mit n Zeilen, wie unten angegeben

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

Ich muss diese drei Dateien in einer einzigen Datei (Master.txt) zusammenführen, indem ich die Header (die ersten drei Zeilen) in Sample2.txt und Sample3.txt wie unten angegeben ausschließe

Gewünschte Ausgabe

$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

Hinweis: In AIX-Maschine mit Ksh 88

RAM
quelle
4
Dies geschieht wahrscheinlich am besten programmgesteuert. Möglicherweise mit Python und Perl. Wenn Sie solche Dinge häufig tun, können Sie die Verwendung von R in Betracht ziehen. Mit R können Sie die einzelnen Dateien als Datenrahmen importieren und dann die Datenrahmen zusammenführen. Ich glaube, dass Pythons Pandas zum Beispiel ähnliche Funktionen bieten, aber ich habe sie nicht verwendet.
Faheem Mitha
@FaheemMitha Perl / Python ist dafür sicherlich übertrieben. Plus Python unter AIX könnte etwas problematisch sein.
Peterph
@ Peter Nun, vielleicht. Wenn er solche Manipulationen jedoch häufig durchführen muss, kann der R-Ansatz dies nur empfehlen. Obwohl ich keine Ahnung über den aktuellen Status von R unter AIX habe. Obwohl R von so ziemlich jedem Jahrgang in der Lage sein sollte, diese Art von Manipulationen durchzuführen.
Faheem Mitha
1
@FaheemMitha warum um alles in der Welt würdest du R dafür empfehlen? Alles, was das OP benötigt, ist, die obersten 3 Zeilen von allen außer der ersten Datei zu entfernen. Angesichts der stark textbasierten UNIX-Oberfläche funktioniert dies für die Standarddienstprogramme.
Peterph
1
@peterph Nun, es ist für diese spezielle Manipulation nicht erforderlich, aber es scheint, dass das Poster Texttabellen manipulieren muss, und im Allgemeinen ist R ein guter Weg, dies zu tun, und lässt sich wahrscheinlich besser auf komplexere Situationen skalieren. Ein alternativer Ansatz zur Verwendung von Unix-Tools ist sicherlich möglich. Ich behaupte nicht, dass dies ein schlechter Weg ist.
Faheem Mitha

Antworten:

18
{ cat sample1.txt; tail -n +4 sample2.txt; tail -n +4 sample3.txt; } > out.txt
Stéphane Chazelas
quelle
@ Stephen Chazelas: Bedauert den früheren Kommentar. Danke es funktioniert perfekt wie erwartet .. !!!
Ram
1
@ram tail -n +4bedeutet, dass unabhängig von der Größe der Datei die obersten 3 Zeilen ausgeschlossen sind. Ich habe es gerade mit einem 10-Zeilen-Fie versucht. Verwechseln Sie die "4" hier nicht mit der Tatsache, dass Ihr Sample 4 Zeilen hat. Das ist im Grunde ein Zufall.
Michael Durrant
@ram :) hat der Vollständigkeit halber headeine ähnliche Option: -n -Xdruckt alle bis auf die letzten X Zeilen.
Peterph
2
@ Peterph, nicht unter AIX, nicht in der POSIX-Spezifikation (nur positive Zahlen erlaubt)
Stéphane Chazelas
Hm, mein schlechtes ... das ist eine GNU-Erweiterung.
Peterph
7
sed '4,${/^---/d;/^Date/d;}' sample1.txt sample2.txt sample3.txt > out.txt
Peterph
quelle
2
+1, aber könnten Sie eine Erklärung hinzufügen? Was macht die ${}Syntax sed?
Terdon
Das ist nicht so ${}, aber "mach {...}in Zeile 4 bis zum Schluss"; Übereinstimmende Zeilen werden entfernt, jedoch erst, nachdem der erste Header verstrichen ist. Die Verwendung des Schwanzes ist jedoch allgemeiner und robuster.
Alexis
@terdon ist wie gesagt {}Gruppierung von Befehlen.
Peterph
@alexis hängt davon ab, was Sie am Ende wollen. Einer der Vorteile (heutzutage jedoch nicht so wichtig) ist, dass nur ein Prozess erzeugt wird. Außerdem können Sie es einfach zu einem Skript machen, #!/bin/sedindem Sie der Dolmetscher sind.
Peterph