Clubbing von zwei Dateien nach jeweils 12 Zeilen im HP-UX-System

441
kiran

Ich habe zwei große Dateien. Eine Datei enthält 0-12 Stunden Daten und andere enthalten 13-23 Stunden Daten. Ich möchte es in einer einzigen Datei mit 23-0 Stunden für jede Kombination zusammenführen.

ex : file1  abcdefg00 abcdefg01 abcdefg02 --------- --------- abcdefg12 pqrstuv00 --------- ---------  file2 :  abcdefg13 abcdefg14 --------- --------- abcdefg23 pqrstuv13 --------- --------- 

Gibt es eine Möglichkeit, die ich so zusammenführen kann? Ausgabe sollte wie folgt sein

> abcdefg00 > abcdefg01 > abcdefg02 > --------- > --------- > abcdefg12 > abcdefg13 > abcdefg14 > --------- > --------- > abcdefg23 > pqrstuv00 > --------- > --------- > pqrstuv13 > --------- > --------- > pqrstuv23 

Vielen Dank im Voraus

1
Hallo kiran, willkommen auf SuperUser. Registrieren Sie sich und prüfen Sie, ob die Antworten in Ihrem Fall funktionieren. Falls nicht, füge einen Kommentar hinzu oder bearbeite deinen Beitrag. Hastur vor 8 Jahren 0

2 Antworten auf die Frage

0
Ira

Wenn Sie die beiden Dateien nacheinander anhängen, aber auch die Reihenfolge der Zeilen umkehren möchten, können Sie entweder eine tail -roder taceine in verwenden

cat file1 file2 | tail -r 

oder

cat file1 file2 | tac 

Die Option -r ist möglicherweise nicht für HP-UX verfügbar tail. Der Befehl tacist Teil von coreutils, wenn Sie ihn hinzufügen müssen.

0
Hastur

Sie können versuchen, es zu benutzen sort

sort -n -k1 f1.txt f2.txt > newfile 

von man sortdir kann das lesensort

Schreibt eine sortierte Verkettung aller DATEIEN in die Standardausgabe.

Möglicherweise müssen Sie die Spalte auswählen, die zum Sortieren ( -k1) oder zum Sortieren der Nummerierung verwendet wird -n.

Wenn Ihre Dateien nicht streng geordnet sind, sollten Sie ein Skript ausführen, das 12 Zeilen abwechselnd aus der ersten und der zweiten Datei mit zwei Dateideskriptoren liest [ 1 ], [ 2 ] .

Es kann etwas Ähnliches wie dieses ergeben

#!/bin/bash while true do for ((i=1;i<=12;i++)); do read -r f1 <&3 && echo "$f1" || exit 1 done for ((i=1;i<=12;i++)); do read -r f2 <&4 && echo "$f2" || exit 2 done done 3<file1 4<file2 

Bis er lesen kann, schreibt er, wenn er ab dem 1. oder 2. Zyklus mit einem anderen Fehlerwert beendet wird.