2012-07-24 8 views
2

J'ai deux fichiers:AWK - le partage de fichiers

File_1

Head;track1;track2;track3; 
date1;vol2;vol4;vol9; 
date2;vol5;vol0;vol1; 
date3;vol7;vol2;vol5; 

File_2

Head1 
trackV1 track1 
trackV2 track2 
trackV3 track3 

Je veux partager File_1 et le résultat stocké dans des fichiers séparés. Avec File_1, j'écris séparément (1 $, 2 $), (1 $, 3 $), (1 $, 4 $). Les noms des nouveaux fichiers seront récupérés à partir de la première colonne File_2 (trackV1, trackV2, trackV3). Je veux créer ces fichiers:

trackV1

Head track1 
date1 vol2 
date2 vol5 
date3 vol7 

trackV2

Head track2 
date1 vol4 
date2 vol0 
date3 vol2 

trackV3

Head track3 
date1 vol9 
date2 vol1 
date3 vol5 

J'ai essayé différentes solutions, mais ne fonctionnent pas:

awk 'BEGIN { while(getline < "File_1"){split($0, tab, ";"); print $(getline a < "File_2") > tab[1] tab[2]}}' 

Nous vous remercions de votre aide.

Répondre

3

Mettez-le dans foo.awk. Utilisation (notez l'ordre des fichiers)
awk -f foo.awk File_2 File_1

BEGIN { 
    # fields separator 
    FS=";" 
} 

# skip a first line in the "names file" 
NR==FNR && NR==1 {next} 

NR==FNR { 
    # read "names file" 
    split($1, aux, " ") 
    name[aux[2]]=aux[1] 
    next 
} 

FNR!=NR && FNR==1{ 
    # read a header of the "data file" and create output files 
    split($0, head) 
    for (i=2; i<NF; i++) { 
     print "Head", head[i] > name[head[i]] 
    } 
    next 
} 

{ 
    # populate output files 
    for (i=2; i<NF; i++) { 
     print $1, $i >> name[head[i]] 
    } 
} 
+0

Merci pour une bonne solution. – Tedee12345