Questione : Shell script di Unix O scritto del Perl per fondere due lime di testo del csv basate su una colonna chiave comune


Ho le seguenti 2 lime di testo (con le loro colonne separate dal virgola)
& devo fonderlo.  File2 ha tutti i valori di chiavi (IE la prima colonna)
di file1 ma di entrambe le lime non sono fascicolati.  Così tutte le chiavi (colonna dello IE primo) dentro
file1 è un sottoinsieme delle chiavi trovate in file2.

file1:
INC00023233, testo di descrizione 1, sistemano 1 testo, ....., sistemano 1 testo
INC00023132, testo di descrizione 2, sistemano il testo 2, ....., sistemano il testo 2
INC00023073, testo di descrizione 3, sistemano il testo 3, ....., sistemano il testo 3
INC00023573, testo di descrizione 4, sistemano il testo 4, ....., sistemano il testo 4
........


file2:
INC00011312, fieldA della data di inizio, fieldA della data di estremità
......
INC00023233, fieldB della data di inizio, fieldB della data di estremità
PBI00023232, fieldC della data di inizio, fieldC della data di estremità
......
INC00023073, fieldD della data di inizio, fieldD della data di estremità
......
INC00023132, fieldE della data di inizio, fieldE della data di estremità
.....
INC00023573, fieldF della data di inizio, fieldF della data di estremità
.....


Vorrei fondere alle le 2 lime superiori tali che la lima fusa risultante del csv è come segue:
INC00023233, testo di descrizione 1, sistemano 1 testo, ....., sistemano 1 testo, fieldB della data di inizio, fieldB della data di estremità
INC00023132, testo di descrizione 2, sistemano il testo 2, ....., sistemano 2 testo, fieldE della data di inizio, fieldE della data di estremità
INC00023073, testo di descrizione 3, sistemano il testo 3, ....., sistemano 3 testo, fieldD della data di inizio, fieldD della data di estremità
INC00023573, testo di descrizione 4, sistemano il testo 4, ....., sistemano 4 testo, fieldF della data di inizio, fieldF della data di estremità
.



UNIX che sto dirigendo sono un Redhat 4 ma ho HP-UX B11.11 (l'interpretatore di Perl è dentro
gli assistenti ma io di Redhat non sono troppo sicuri circa gli assistenti del HP-UX), così lo scritto
se necessità di potere funzionare su quelle piattaforme

Risposta : Shell script di Unix O scritto del Perl per fondere due lime di testo del csv basate su una colonna chiave comune

Sta presumendo non virgole nella vari descrizione dei campi cioè, ecc. non comprende i virgole.

Un metodo più semplice ha potuto essere di usare il mysql e caricare la prima lima ed allora pubblicare gli aggiornamenti con i dati dalla seconda lima.

Potete memorizzare l'uscita in una lima e caricarli.
In questo caso assicurar aggiungere #! /usr/local/bin/perl alla parte superiore della lima e del 1; all'estremità dell'archivio di uscita in modo da di voi non ottenere gli errori quando richiedete la lima in cui il hash è immagazzinato.
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:
36:
37:
38:
39:
40:
41:
42:
43:
#! /usr/local/bin/perl
$file1= " percorso a filename1 ";
il mio $hash= {};
aprir (File1, ")<> {
chomp ();
@array=split (/,/, $_);
il #The sotto costruisce un hash riferito di trita
$hash-> {$array [0]} {“esiste„} =1;
$hash-> {$array [0]} {“prova di descrizione 1„} =$array [1];
$hash-> {$array [0]} {“prova del campo 1„} =$array [2];
$hash-> {$array [0]} {“prova del campo 2„} =$array [3];
.
.
.
}
#done con l'elaborazione del file1.
fine (File1);
aprir (File2, ")<> {
chomp ();
@array=split (/,/, $_);
se (esiste $hash-> {$array [0]} {“esiste„} e $hash-> {$array [0]} {“esiste„} ==1) {
$hash-> {$array [0]} {“primo campo dalla seconda lima„} =$array [1];
$hash-> {$array [0]} {“secondo campo„} =$array [2];
$hash-> {$array [0]} {“terzo campo„} =$array [3];
.
.
.
.
}

}
il #done con l'elaborazione archiva quando sta abbinando le chiavi.
fine (File2);

il #you ora ha un $hash a che è un riferimento trita.
foreach $key (chiavi % {$hash}) {
#    stampa “$key: $hash->} \ n {di $key„;
        foreach $index (chiavi % {$hash-> {$key}}) {
           stampa “\ $hash-> {“$key„} {“$index„} =$hash-> {$key}} \ n {di $index„;
        }
}
Altre soluzioni  
 
programming4us programming4us