|
|
|
|
Bonjour,
voici mon problème désormais
J'ai un fichier original de la forme :
1234234:toto:prenomtoto:23542345:toto@toierito.com
...
...
J'ai créé un login pour chaque ligne (en fonction du nom et du prenom) et mis tout ça dans un autre fichier de la forme :
totopre
...
...
Ce que je souhaite réaliser, c'est ajouter le login 1 à la suite de la ligne 1 du fichier original, etc pour toutes les lignes, de façon à ce que cela donne :
1234234:toto:prenomtoto:23542345:toto@toierito.com:totopre
...
...
Pour joindre 2 fichiers, il ya la commande Join mais celle ci nécessite un champ commun dans les 2 fichiers à joindre. Et malheureusement ce n'est pas le cas.
J'ai aussi trouvé avec mon ami google que la commande Cat permet de concaténer 2 fichiers mais malheureusement la joindre se fait fichier par fichier et non ligne par ligne.
De plus, le man ne me propose apparemment pas de solutions dans les options de ces commandes...
avez vous une idée ou une solution, svp?
merci d'avance
marc
Si c'est pas trop long, c'est sûrement plus rapide de le faire à la main.
BEGIN { FS=":";OFS=":"}
// {print $0,$2 substr($3,1,3)}
END {} et exécute-le en lançant awk -f script.awk fichierA
Court et bon! _ç_§: (.)#(.) |
Bonjour M&M
|
Oui c'est possible, bien sûr. Tu peux lire le paramètre de la ligne de commande et ouvrir une première fois ce fichier sous la clause Begin. (Tu pourrais aussi bien y ouvrir ton fichier B).
BEGIN {
IN_FILE = ARGV[1]; #print "Ouverture de "IN_FILE"\n";
FS=":";OFS=":"; i=0;lpre=3
while ((getline < IN_FILE)>0) {
#nom[i]=$2;prenom[i++]=$3
nomplus3=$2 substr($3,1,lpre);
#prenom_du[nomplus3]=$3;
if (nbr_de[nomplus3]++ >0) {
unique[$2$3]=nomplus3 sprintf("%s",nbr_de[nomplus3]);
print "nouveau nom = " unique[$2$3];}
}
close(IN_FILE);
# print "Recherche des homonymes\n------------------------";
# for (mec in nbr_de) {if (nbr_de[mec]>1) {
# printf ("%2s fois %10s\n",nbr_de[mec],mec);h++}
# }
# print (h>1)?"\n":"Aucun.\n";
}
// {if ($2$3 in unique) {print $0,unique[$2$3];}
else {print $0,$2 substr($3,1,lpre);}
} _ç_§:
(.)#(.) |
Chapeau bas M&M pour ces scripts.
|
Super !
|
J'arrive a:
|
Je ne vois pas bien pourquoi, à moins que ce ne soit l'ordre d'élaboration de l'opération, alors je sors l'incrémentation de l'expression conditionnelle. Je vois encore un tiret en trop en fin de chaque ligne. Ceci répond à ta demande initiale : // {i++;
if (i==1) {ln=$0}
else {ln=ln "|" $0
}
if (i>3) {print ln;ln="";i=0}
}
END { if (i>0) {print ln}
} _ç_§:
(.)#(.) |
Bonjour,
|