2016-12-28 2 views
1

Je dois remplacer une partie des valeurs dans un fichier par des valeurs d'un autre si un des champs correspond.Complexe awk remplacer d'un fichier à l'autre

fichier à remplacer:

NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',300,200,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',300,200,12,1,24,1,19,110,220,1 

fichier qui contient les valeurs correctes:

'AL',220,110 
'DZ',379,189.5 
'AO',931,465.5 
'AG',659,329.5 

Donc fichier1 par le match « AL » je remplacer column8 avec colonne2 de fichier2 et column9 avec colonne3 à partir de fichier2. Comment y parvenir avec awk ou quelque chose de similaire, mais pas perl, merci. :)

Et les conditions dans une sorte de code pseudo:

if (file2[col1] == file1[col7]) 
    file1[col8] = file2[col2] 
    file1[col9] = file2[col3] 

Répondre

3

Le dessous awk devrait fonctionner très bien pour vous

awk -F"," 'BEGIN{OFS=",";} FNR==NR{col2[$1]=$2; col3[$1]=$3;next} ($7 in col2){$8=col2[$7]; $9=col3[$7];print}' file2 file1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AL',220,110,12,1,24,1,19,110,220,1 
NULL,NULL,1,'2017-01-01 00:00:00','2017-12-31 23:59:59','SE','AG',659,329.5,12,1,24,1,19,110,220,1 

L'idée est d'abord de créer un tableau de hachage de file2 avec les valeurs réelles de la colonne 2 et de la colonne 3 par colonne 1 et le maintenir dans les tableaux col2 et col3. Ensuite, lors de l'analyse file1 avec la condition ($7 in col2 && $7 in col3), nous sélectionnons ces lignes dans file1 dont $7 appartient à l'un ou l'autre des tableaux et si oui, remplacez les valeurs.

+0

Essentiellement la même réponse, il semble. ++ –

+1

@JamesBrown: Je dirais pour une fois .. :) – Inian

+1

Merci, ça fonctionne comme un charme! @Inian – user3309234