Frage : Shell-Skript Unix-Oder Perl-Index, zum von zwei csv Textdateien zu vermischen basiert auf einer allgemeinen Schlüsselspalte


Ich habe die folgenden 2 Textdateien (wenn ihre Spalten durch Komma getrennt sind)
U. muss ich sie vermischen.  File2 hat alle Werte der Schlüssel (IE die erste Spalte)
von file1 aber von beiden Akten werden nicht sortiert.  So alle Schlüssel (Spalte IE-1.) innen
file1 ist eine Teilmenge der Schlüssel, die in file2 gefunden werden.

file1:
INC00023233, Text der Beschreibung 1, fangen 1 Text, ....., auffangen 1 Text auf
INC00023132, Text der Beschreibung 2, fangen Text 2, ....., auffangen Text 2 auf
INC00023073, Text der Beschreibung 3, fangen Text 3, ....., auffangen Text 3 auf
INC00023573, Text der Beschreibung 4, fangen Text 4, ....., auffangen Text 4 auf
........


file2:
INC00011312, Anfangsdatum fieldA, Enddatum fieldA
......
INC00023233, Anfangsdatum fieldB, Enddatum fieldB
PBI00023232, Anfangsdatum fieldC, Enddatum fieldC
......
INC00023073, Anfangsdatum fieldD, Enddatum fieldD
......
INC00023132, Anfangsdatum fieldE, Enddatum fieldE
.....
INC00023573, Anfangsdatum fieldF, Enddatum fieldF
.....


Ich möchte die oben genannten 2 Akten vermischen so, dass die resultierende vermischte csv Akte ist, wie folgt:
INC00023233, Text der Beschreibung 1, fangen 1 Text, ....., auffangen 1 Text, Anfangsdatum fieldB, Enddatum fieldB auf
INC00023132, Text der Beschreibung 2, fangen Text 2, ....., auffangen 2 Text, Anfangsdatum fieldE, Enddatum fieldE auf
INC00023073, Text der Beschreibung 3, fangen Text 3, ....., auffangen 3 Text, Anfangsdatum fieldD, Enddatum fieldD auf
INC00023573, Text der Beschreibung 4, fangen Text 4, ....., auffangen 4 Text, Anfangsdatum fieldF, Enddatum fieldF auf
….



UNIX, das ich bin ein Redhat 4 leite, aber ich habe HP-UX B11.11 (Perl-Interpret ist innen
die Redhat Bediener aber ich sind nicht über die HP-UXbediener), so der Index zu sicher
vorausgesetzt Notwendigkeit, in der Lage zu sein, auf jene Plattformen zu laufen

Antwort : Shell-Skript Unix-Oder Perl-Index, zum von zwei csv Textdateien zu vermischen basiert auf einer allgemeinen Schlüsselspalte

Voraussetzen keine Kommas in der verschiedenen Feldd.h. Beschreibung, im etc. einschließen nicht Kommas eßen.

Eine einfachere Methode konnte, mysql zu benutzen und die erste Akte zu laden und Updates mit Daten von der zweiten Akte dann herauszugeben sein.

Sie können den Ausgang in einer Akte speichern und ihn laden.
In diesem Fall sicherstellen hinzuzufügen #! /usr/local/bin/perl an der Oberseite der Akte und des 1; am Ende der Ausgabedatei also Sie Störungen nicht erhalten, wenn Sie die Akte fordern, in der das Durcheinander. gespeichert.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
6:
37:
38:
39:
40:
41:
42:
43:
#! /usr/local/bin/perl
$file1= " Weg zu filename1 ";
mein $hash= {};
öffnen (File1, ")<> {
chomp ();
@array=split (/,/, $_);
das folgende #The errichtet ein bezogenes Durcheinander von hackt
$hash-> {$array [0]} {„existiert“}, =1;
$hash-> {$array [0]} {„Test der Beschreibung 1“} =$array [1];
$hash-> {$array [0]} {„Test des Feldes 1“} =$array [2];
$hash-> {$array [0]} {„Test des Feldes 2“} =$array [3];
.
.
.
}
#done mit der Verarbeitung von file1.
Abschluss (File1);
öffnen (File2, ")<> {
chomp ();
@array=split (/,/, $_);
wenn (existiert $hash-> {$array [0]} {„existiert“} und $hash-> {$array [0]} {„existiert“}, ==1) {
$hash-> {$array [0]} {„erstes Feld von der zweiten Akte“} =$array [1];
$hash-> {$array [0]} {„an zweiter Stelle Feld“} =$array [2];
$hash-> {$array [0]} {„drittes Feld“} =$array [3];
.
.
.
.
}

}
#done mit der Verarbeitung archiviert, wenn Schlüssel zusammenbringen.
Abschluss (File2);

#you haben jetzt ein $hash, dem ein Hinweis auf hackt ist.
foreach $key (Schlüssel % {$hash}) {
#    Druck „$key: $hash-> {$key} \ n“;
        foreach $index (Schlüssel % {$hash-> {$key}}) {
           Druck „\ $hash-> {„$key“} {„$index“} =$hash-> {$key} {$index} \ n“;
        }
}
Weitere Lösungen  
 
programming4us programming4us