Concaténer des bouts de fichiers sur un "ID"
Résolu/Fermé
A voir également:
- Concaténer des bouts de fichiers sur un "ID"
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Renommer des fichiers en masse - Guide
- Impossible de supprimer un fichier - Guide
- Explorateur de fichiers - Guide
16 réponses
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
1 mai 2012 à 11:53
1 mai 2012 à 11:53
hello
si je comprends, à partir de chaque ligne du 2ème fichier :
IDn ; animal
tu veux obtenir :
ID1, date1, animal ; ...etc
ID1, date2, animal; ...etc
...
ID2; date1; animal;...etc
ID2; date2 ; animal ; ...etc
etc
si je comprends, à partir de chaque ligne du 2ème fichier :
IDn ; animal
tu veux obtenir :
ID1, date1, animal ; ...etc
ID1, date2, animal; ...etc
...
ID2; date1; animal;...etc
ID2; date2 ; animal ; ...etc
etc
Salut, et merci pour ta réponse ;) !
oui c'est cela.
En fait, dans le premier fichier, une ligne correspondait à une observation, à une station et à une date. Donc parfois, une station pouvait être "dupliquée" sur plusieurs lignes à elle toute seule, car elle a été échantillonnée à plusieurs dates différentes, le reste des 100 colonnes contiennent, pour environ 40 ; les espèces, et pour le reste ; des données autres, la méthode de comptage, etc etc.
Dans le deuxième fichier on a vraiment fait en sorte d'avoir des "blocs" qui font autant de lignes qu'il y a d'espèces, donc environ 40, et chaque bloc correspond à une ligne du premier fichier, mais avec les espèces en lignes au lieu d'être en colonnes. Donc un bloc correspond à une station et une date précise.
Sauf que dans ce fichier on a "que" les espèces et les ID des stations (qui se répètent 40 fois) et il faudrait remettre les variables des 100 autres colonnes du premier fichier sur chaque ligne du second fichier.
Donc en gros, on aura pour chaque "bloc" de 40 lignes, 40x les mêmes informations qui se répètent, mais c'est ce qu'on cherche justement.
oui c'est cela.
En fait, dans le premier fichier, une ligne correspondait à une observation, à une station et à une date. Donc parfois, une station pouvait être "dupliquée" sur plusieurs lignes à elle toute seule, car elle a été échantillonnée à plusieurs dates différentes, le reste des 100 colonnes contiennent, pour environ 40 ; les espèces, et pour le reste ; des données autres, la méthode de comptage, etc etc.
Dans le deuxième fichier on a vraiment fait en sorte d'avoir des "blocs" qui font autant de lignes qu'il y a d'espèces, donc environ 40, et chaque bloc correspond à une ligne du premier fichier, mais avec les espèces en lignes au lieu d'être en colonnes. Donc un bloc correspond à une station et une date précise.
Sauf que dans ce fichier on a "que" les espèces et les ID des stations (qui se répètent 40 fois) et il faudrait remettre les variables des 100 autres colonnes du premier fichier sur chaque ligne du second fichier.
Donc en gros, on aura pour chaque "bloc" de 40 lignes, 40x les mêmes informations qui se répètent, mais c'est ce qu'on cherche justement.
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
1 mai 2012 à 15:19
1 mai 2012 à 15:19
j'ai ajouté des chiffres en fin de ligne pour les différencier.
est ce que ca serait ça, sachant que les colonnes en gras doivent être enlevées
est ce que ca serait ça, sachant que les colonnes en gras doivent être enlevées
$ head a5 a6 ==> a5 <== ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_2 ; date 7 ; ours ; lynx ; girafe ; ... etc;4;4 ID_station_2 ; date 8 ; ours ; lynx ; girafe ; ... etc;5;5 ID_station_3 ; date 1 ; ours ; lynx ; girafe ; ... etc;6;6 ID_station_4 ; date 8 ; ours ; lynx ; girafe ; ... etc;7;7 ==> a6 <== ID_station_1 ; ours ; ID_station_1 ; lynx ; ID_station_1 ; girafe ; ... ID_station_1 ; ours ; ID_station_1 ; lynx ; ID_station_1 ; girafe ; ... ID_station_2 ; ours ; ID_station_2 ; lynx ; $ awk -F";" -v OFS=';' 'FNR==NR {x[$1, $2]=$0;next} {for(n in x){if($1==substr(n, 0, index(n, SUBSEP)-1))print $0 x[n] }}' a5 a6 ID_station_1 ; ours ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; ours ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; ours ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_1 ; lynx ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; lynx ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; lynx ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_1 ; girafe ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; girafe ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; girafe ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_1 ; ours ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; ours ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; ours ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_1 ; lynx ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; lynx ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; lynx ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_1 ; girafe ;ID_station_1 ; date 1 ; ours ; lynx ; girafe ; ... etc;1;1 ID_station_1 ; girafe ;ID_station_1 ; date 2 ; ours ; lynx ; girafe ; ... etc;2;2 ID_station_1 ; girafe ;ID_station_1 ; date 3 ; ours ; lynx ; girafe ; ... etc;3;3 ID_station_2 ; ours ;ID_station_2 ; date 7 ; ours ; lynx ; girafe ; ... etc;4;4 ID_station_2 ; ours ;ID_station_2 ; date 8 ; ours ; lynx ; girafe ; ... etc;5;5 ID_station_2 ; lynx ;ID_station_2 ; date 7 ; ours ; lynx ; girafe ; ... etc;4;4 ID_station_2 ; lynx ;ID_station_2 ; date 8 ; ours ; lynx ; girafe ; ... etc;5;5 ID_station_2 ; girafe ; ID_station_2 ; date 7 ; ours ; lynx ; girafe ; ... etc;4;4 ID_station_2 ; girafe ; ID_station_2 ; date 8 ; ours ; lynx ; girafe ; ... etc;5;5 $
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
1 mai 2012 à 16:43
1 mai 2012 à 16:43
et comme ça ?
$ awk -F";" -v OFS=';' 'FNR==NR {i=$1;$1=$3=$4=$5="";gsub(FS"+",FS); x[i, $2]=$0;sub(FS, "", x[i, $2]); next} {for(n in x){if($1==substr(n, 0, index(n, SUBSEP)-1))print $0 x[n] }}' a5 a6 ID_station_1 ; ours ; date 1 ; ... etc;1;1 ID_station_1 ; ours ; date 2 ; ... etc;2;2 ID_station_1 ; ours ; date 3 ; ... etc;3;3 ID_station_1 ; lynx ; date 1 ; ... etc;1;1 ID_station_1 ; lynx ; date 2 ; ... etc;2;2 ID_station_1 ; lynx ; date 3 ; ... etc;3;3 ID_station_1 ; girafe ; date 1 ; ... etc;1;1 ID_station_1 ; girafe ; date 2 ; ... etc;2;2 ID_station_1 ; girafe ; date 3 ; ... etc;3;3 ID_station_1 ; ours ; date 1 ; ... etc;1;1 ID_station_1 ; ours ; date 2 ; ... etc;2;2 ID_station_1 ; ours ; date 3 ; ... etc;3;3 ID_station_1 ; lynx ; date 1 ; ... etc;1;1 ID_station_1 ; lynx ; date 2 ; ... etc;2;2 ID_station_1 ; lynx ; date 3 ; ... etc;3;3 ID_station_1 ; girafe ; date 1 ; ... etc;1;1 ID_station_1 ; girafe ; date 2 ; ... etc;2;2 ID_station_1 ; girafe ; date 3 ; ... etc;3;3 ID_station_2 ; ours ; date 7 ; ... etc;4;4 ID_station_2 ; ours ; date 8 ; ... etc;5;5 ID_station_2 ; lynx ; date 7 ; ... etc;4;4 ID_station_2 ; lynx ; date 8 ; ... etc;5;5 ID_station_2 ; girafe ; date 7 ; ... etc;4;4 ID_station_2 ; girafe ; date 8 ; ... etc;5;5 $ $ $
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Okay, alors ouais, l'idée est là je dirai.. elle est même bien là.
j'ai bêtement oublié de préciser que mes données sont dans un fichier au format texte "tab delimited" donc avec tabulation pour délimiter les colonnes, appelons ce fichier "atlas.txt" (j'avais mis des ";" dans mes précédents posts pour montrer la séparation des colonnes mais c'est pas ça qui les sépare ; c'est bien une tabulation)
et sa première ligne contient les entêtes (Nom_station \t Ours \t Lynx \t etc...)
je mets les \t volontairement pour dire qu'il y a une tabulation hein.
L'idéal serait d'enregistrer le résultat de la commande dans un nouveau fichier.
j'ai bêtement oublié de préciser que mes données sont dans un fichier au format texte "tab delimited" donc avec tabulation pour délimiter les colonnes, appelons ce fichier "atlas.txt" (j'avais mis des ";" dans mes précédents posts pour montrer la séparation des colonnes mais c'est pas ça qui les sépare ; c'est bien une tabulation)
et sa première ligne contient les entêtes (Nom_station \t Ours \t Lynx \t etc...)
je mets les \t volontairement pour dire qu'il y a une tabulation hein.
L'idéal serait d'enregistrer le résultat de la commande dans un nouveau fichier.
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
2 mai 2012 à 09:53
2 mai 2012 à 09:53
pour les tabs, remplacer
awk -F";" -v OFS=';'par
awk -F"\t" -v OFS='\t'pour enregitrer les résultats, ajouter en fin de ligne:
awk ... > resultats.txt
Oui merci, j'ai trouvé ça entre temps hier soir... ;-)
par contre le fichier concaténé devrait plutôt ressembler à ça :
ID_station_1 ; ours ; etc;1;1
ID_station_1 ; lynx ; etc;1;1
ID_station_1 ; girafe ; etc;1;1
ID_station_1 ; ours ; etc;2;2
ID_station_1 ; lynx ; etc;2;2
ID_station_1 ; girafe ; etc;2;2
ID_station_1 ; ours ; etc;3;3
ID_station_1 ; lynx ; etc;3;3
ID_station_1 ; girafe ; etc;3;3
ID_station_2 ; ours ; etc;4;4
ID_station_2 ; lynx ; etc;4;4
ID_station_2 ; girafe ; etc;4;4
ID_station_2 ; ours ; etc;5;5
ID_station_2 ; lynx ; etc;5;5
ID_station_2 ; girafe ; etc;5;5
ID_station_3 ; ours ; etc;6;6
ID_station_3 ; lynx ; etc;6;6
ID_station_3 ; girafe ; etc;6;6
ID_station_4 ; ours ; etc;7;7
ID_station_4 ; lynx ; etc;7;7
ID_station_4 ; girafe ; etc;7;7
au lieu de celui qu'on obtient avec ton code, qui possède des lignes à double.
j'ai essayé de comprendre le code... difficile pour un novice.
Y a peut-être une boucle superflue, je sais pas...
par contre le fichier concaténé devrait plutôt ressembler à ça :
ID_station_1 ; ours ; etc;1;1
ID_station_1 ; lynx ; etc;1;1
ID_station_1 ; girafe ; etc;1;1
ID_station_1 ; ours ; etc;2;2
ID_station_1 ; lynx ; etc;2;2
ID_station_1 ; girafe ; etc;2;2
ID_station_1 ; ours ; etc;3;3
ID_station_1 ; lynx ; etc;3;3
ID_station_1 ; girafe ; etc;3;3
ID_station_2 ; ours ; etc;4;4
ID_station_2 ; lynx ; etc;4;4
ID_station_2 ; girafe ; etc;4;4
ID_station_2 ; ours ; etc;5;5
ID_station_2 ; lynx ; etc;5;5
ID_station_2 ; girafe ; etc;5;5
ID_station_3 ; ours ; etc;6;6
ID_station_3 ; lynx ; etc;6;6
ID_station_3 ; girafe ; etc;6;6
ID_station_4 ; ours ; etc;7;7
ID_station_4 ; lynx ; etc;7;7
ID_station_4 ; girafe ; etc;7;7
au lieu de celui qu'on obtient avec ton code, qui possède des lignes à double.
j'ai essayé de comprendre le code... difficile pour un novice.
Y a peut-être une boucle superflue, je sais pas...
vordano
Messages postés
1685
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
2 mai 2012 à 10:45
2 mai 2012 à 10:45
bonjour,
en lisant ta demande, je me suis demandé si tu avais déja pensé a utiliser une bdd pour faciliter ce genre de traitement ?
en lisant ta demande, je me suis demandé si tu avais déja pensé a utiliser une bdd pour faciliter ce genre de traitement ?
Salut,
une base de données... hum. Oui, laquelle par exemple ?
Je ne m'y connais pas en base de données, c'est peut-être l'occasion d'apprendre comment ça fonctionne.
Tu penses possible de faire ce que je cherche à faire avec une telle base ?
N'y aura-t-il pas de problèmes avec les chaines de caractères (parce que certaines de mes colonnes contiennent des trucs pas tristes....)
merci ;)
une base de données... hum. Oui, laquelle par exemple ?
Je ne m'y connais pas en base de données, c'est peut-être l'occasion d'apprendre comment ça fonctionne.
Tu penses possible de faire ce que je cherche à faire avec une telle base ?
N'y aura-t-il pas de problèmes avec les chaines de caractères (parce que certaines de mes colonnes contiennent des trucs pas tristes....)
merci ;)
vordano
Messages postés
1685
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
2 mai 2012 à 11:09
2 mai 2012 à 11:09
le plus simple (et gratuit) c'est une base mysql
tu as différentes tables permettant de séparer tes données (par exemple une table station, une table espèce, une table animaux, une table température, etc...)
et pour les chaines de caractère, c'est la même chose.
pour faire une base propre, tu pourrais peut être chercher quelques infos sur "merise"
tu as différentes tables permettant de séparer tes données (par exemple une table station, une table espèce, une table animaux, une table température, etc...)
et pour les chaines de caractère, c'est la même chose.
pour faire une base propre, tu pourrais peut être chercher quelques infos sur "merise"
ok... je jette un oeil, je suis entrain de télécharger mysql, c'est bien ça : http://www.mysql.fr/downloads/installer/ pour Windows (je n'ai pas la chance d'être sous Linux au travail)
Bon et bien le cas est réglé pour ça :
"The installer has insufficient privileges to access this directory : C:\Program files\MySQL. The installation cannot continue. Log on as administrator or contact your system administrator.
Je la sentais venir. Je ne peux rien installer en "dur" sur mon poste.
Bon et bien le cas est réglé pour ça :
"The installer has insufficient privileges to access this directory : C:\Program files\MySQL. The installation cannot continue. Log on as administrator or contact your system administrator.
Je la sentais venir. Je ne peux rien installer en "dur" sur mon poste.
vordano
Messages postés
1685
Date d'inscription
mardi 12 juillet 2011
Statut
Membre
Dernière intervention
20 juillet 2012
316
2 mai 2012 à 12:46
2 mai 2012 à 12:46
ah ça c'est dommage.
mais si c'est comme ça, peut être que ton entreprise dispose d'un serveur avec mysql installé dessus. tu peux peut être te renseigner pour que votre administrateur créé une base et que tu ai les droits dessus.
sinon il y as autre chose, plus minimaliste et qui pourrais probablement répondre a ton problème de droit: utiliser sqlite (c'est un genre de mini base de donnée, mais je ne m'en suis jamais servi, donc aucun moyen de savoir si ça s'installe ;) )
mais si c'est comme ça, peut être que ton entreprise dispose d'un serveur avec mysql installé dessus. tu peux peut être te renseigner pour que votre administrateur créé une base et que tu ai les droits dessus.
sinon il y as autre chose, plus minimaliste et qui pourrais probablement répondre a ton problème de droit: utiliser sqlite (c'est un genre de mini base de donnée, mais je ne m'en suis jamais servi, donc aucun moyen de savoir si ça s'installe ;) )
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
2 mai 2012 à 12:08
2 mai 2012 à 12:08
comme ça ?
$ awk -F';' -v OFS=';' 'NF {x=$0; $2=$4=$5="" ; gsub(FS"+",FS);print ; $0=x ; $2=$3=$5="";gsub(FS"+",FS);print ; $0=x; $2=$3=$4="";gsub(FS"+",FS);print}' a5 ID_station_1 ; ours ; ... etc;1;1 ID_station_1 ; lynx ; ... etc;1;1 ID_station_1 ; girafe ; ... etc;1;1 ID_station_1 ; ours ; ... etc;2;2 ID_station_1 ; lynx ; ... etc;2;2 ID_station_1 ; girafe ; ... etc;2;2 ID_station_1 ; ours ; ... etc;3;3 ID_station_1 ; lynx ; ... etc;3;3 ID_station_1 ; girafe ; ... etc;3;3 ID_station_2 ; ours ; ... etc;4;4 ID_station_2 ; lynx ; ... etc;4;4 ID_station_2 ; girafe ; ... etc;4;4 ID_station_2 ; ours ; ... etc;5;5 ID_station_2 ; lynx ; ... etc;5;5 ID_station_2 ; girafe ; ... etc;5;5 ID_station_3 ; ours ; ... etc;6;6 ID_station_3 ; lynx ; ... etc;6;6 ID_station_3 ; girafe ; ... etc;6;6 ID_station_4 ; ours ; ... etc;7;7 ID_station_4 ; lynx ; ... etc;7;7 ID_station_4 ; girafe ; ... etc;7;7 $
ça marche presque ça, les 21 premières lignes sont bonnes, mais ensuite il me rajoute jusqu'à la ligne 84, des ID_Station_N ...
Où est-ce qu'il faudra que j'adapte ce code pour prendre en compte les trois petits points qui sont censés représentés encore plein d'autres colonnes ?
Sont-ce les dollars suivi d'un chiffre ?
Où est-ce qu'il faudra que j'adapte ce code pour prendre en compte les trois petits points qui sont censés représentés encore plein d'autres colonnes ?
Sont-ce les dollars suivi d'un chiffre ?
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
Modifié par dubcek le 3/05/2012 à 10:04
Modifié par dubcek le 3/05/2012 à 10:04
$n veut dire champ (ou colonne) n
$2=$4=$5="" veut dire que j'efface les colonnes 2, 4 et 5. le reste, y compris les ... n'est pas touché, qu'il y ait 3 ou 100 colonnes et affiché tel quel
par ex, avec 1 ligne
$2=$4=$5="" veut dire que j'efface les colonnes 2, 4 et 5. le reste, y compris les ... n'est pas touché, qu'il y ait 3 ou 100 colonnes et affiché tel quel
par ex, avec 1 ligne
$ head -1 a5 ID_station_1 ; date 1 ; ours ; lynx ; girafe ; 1;1;1;1;1;1;1;1;1;1;etc;1;1 $ $ awk -F';' -v OFS=';' 'NF {x=$0; $2=$4=$5="" ; gsub(FS"+",FS);print ; $0=x ; $2=$3=$5="";gsub(FS"+",FS);print ; $0=x; $2=$3=$4="";gsub(FS"+",FS);print}' a5|head -4 ID_station_1 ; ours ; 1;1;1;1;1;1;1;1;1;1;etc;1;1 ID_station_1 ; lynx ; 1;1;1;1;1;1;1;1;1;1;etc;1;1 ID_station_1 ; girafe ; 1;1;1;1;1;1;1;1;1;1;etc;1;1 ID_station_1 ; ours ; ... etc;2;2 $ $
Bonjour !
Ok merci pour ces explications...
sauf que je pige pas encore tout : par exemple, comment est-ce que le programme sait que telle partie doit traiter le fichier 1 et telle autre le fichier 2 ?
en dehors de ça, j'arrive vraiment pas à adapter le code à mes données :/ c'est terrible...
edit : j'ai pu installer "sqlite portable" je regarde ce que je peux faire avec en parallèle...
> entrain d'importer le premier fichier depuis 45 minutes... j'espère que ça va jouer.... je perds tout espoir après 1h je tue le programme.
Ok merci pour ces explications...
sauf que je pige pas encore tout : par exemple, comment est-ce que le programme sait que telle partie doit traiter le fichier 1 et telle autre le fichier 2 ?
en dehors de ça, j'arrive vraiment pas à adapter le code à mes données :/ c'est terrible...
edit : j'ai pu installer "sqlite portable" je regarde ce que je peux faire avec en parallèle...
> entrain d'importer le premier fichier depuis 45 minutes... j'espère que ça va jouer.... je perds tout espoir après 1h je tue le programme.
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
4 mai 2012 à 12:05
4 mai 2012 à 12:05
je n'ai pas traité le fichier 2 parce que dans l'exemple de ton post #7, je ne vois plus le rapport entre les 2 fichiers.
peux tu rappeller
le lien entre les 2.
peux tu rappeller
le lien entre les 2.
Ok c'est pas grave,
je vais prendre la structure exacte de mes fichiers histoire de rendre la chose plus simple.
Fichier 1 :
"ID" "Vsp" "Vnb"
1 "qwe" ""
1 "ors" ""
1 "arg" ""
1 "baf" ""
1 "bst" 12
1 "bop" ""
1 "baq" ""
1 "cca" NA
1 "cra" ""
1 "cwe" ""
1 "crw" NA
1 "epl" ""
1 "gad" ""
1 "gru" 7
1 "grw" NA
1 "lla" ""
1 "llc" ""
1 "loq" ""
1 "nop" ""
1 "obk" ""
1 "orr" ""
1 "pep" ""
1 "caa" NA
1 "red" ""
1 "sen" NA
1 "sdq" ""
1 "spp" ""
1 "tgn" ""
1 "tff" ""
1 "tlr" NA
1 "trr" ""
1 "vay" ""
1 "vaz" ""
1 "aso" NA
1 "apq" ""
1 "ocr" NA
1 "asr" NA
2 "qwe" 68
2 "ors" ""
etc...
la série continue avec autant de lignes commençant par "2" qu 'il y en avait qui commençaient par 1. Ensuite idem avec 3, 4, jusqu'à D. D avoisinant de mémoire 2500.
Ensuite, fichier 2 :
ID sta_code day month year t z
1 "Sta1"_972/840 17 8 1975 982050.00 846926.50
2 "Sta2"_953/850 0 8 1967 923372.70 890518.10
etc...
Chaque ligne du fichier 2, doit être collée en face des données correspondantes au même ID, dans le fichier 1. Et donc ressembler à ça dans un nouveau fichier :
"ID" "Vsp" "Vnb" sta_code day month year t z
1 "qwe" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "ors" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "arg" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "baf" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "bst" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "bop" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "baq" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "cca" NA .........................etc !
1 "cra" ""
1 "cwe" ""
1 "crw" NA
1 "epl" ""
1 "gad" ""
1 "gru" ""
1 "grw" NA
1 "lla" ""
1 "llc" ""
1 "loq" ""
1 "nop" ""
1 "obk" ""
1 "orr" ""
1 "pep" ""
1 "caa" NA
1 "red" ""
1 "sen" NA
1 "sdq" ""
1 "spp" ""
1 "tgn" ""
1 "tff" ""
1 "tlr" NA
1 "trr" ""
1 "vay" ""
1 "vaz" ""
1 "aso" NA
1 "apq" ""
1 "ocr" NA
1 "asr" NA
2 "qwe" 68 "Sta2"_953/850 0 8 1967 923372.70 890518.10
2 "ors" "" "Sta2"_953/850 0 8 1967 923372.70 890518.10
etc....
je vais prendre la structure exacte de mes fichiers histoire de rendre la chose plus simple.
Fichier 1 :
"ID" "Vsp" "Vnb"
1 "qwe" ""
1 "ors" ""
1 "arg" ""
1 "baf" ""
1 "bst" 12
1 "bop" ""
1 "baq" ""
1 "cca" NA
1 "cra" ""
1 "cwe" ""
1 "crw" NA
1 "epl" ""
1 "gad" ""
1 "gru" 7
1 "grw" NA
1 "lla" ""
1 "llc" ""
1 "loq" ""
1 "nop" ""
1 "obk" ""
1 "orr" ""
1 "pep" ""
1 "caa" NA
1 "red" ""
1 "sen" NA
1 "sdq" ""
1 "spp" ""
1 "tgn" ""
1 "tff" ""
1 "tlr" NA
1 "trr" ""
1 "vay" ""
1 "vaz" ""
1 "aso" NA
1 "apq" ""
1 "ocr" NA
1 "asr" NA
2 "qwe" 68
2 "ors" ""
etc...
la série continue avec autant de lignes commençant par "2" qu 'il y en avait qui commençaient par 1. Ensuite idem avec 3, 4, jusqu'à D. D avoisinant de mémoire 2500.
Ensuite, fichier 2 :
ID sta_code day month year t z
1 "Sta1"_972/840 17 8 1975 982050.00 846926.50
2 "Sta2"_953/850 0 8 1967 923372.70 890518.10
etc...
Chaque ligne du fichier 2, doit être collée en face des données correspondantes au même ID, dans le fichier 1. Et donc ressembler à ça dans un nouveau fichier :
"ID" "Vsp" "Vnb" sta_code day month year t z
1 "qwe" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "ors" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "arg" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "baf" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "bst" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "bop" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "baq" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50
1 "cca" NA .........................etc !
1 "cra" ""
1 "cwe" ""
1 "crw" NA
1 "epl" ""
1 "gad" ""
1 "gru" ""
1 "grw" NA
1 "lla" ""
1 "llc" ""
1 "loq" ""
1 "nop" ""
1 "obk" ""
1 "orr" ""
1 "pep" ""
1 "caa" NA
1 "red" ""
1 "sen" NA
1 "sdq" ""
1 "spp" ""
1 "tgn" ""
1 "tff" ""
1 "tlr" NA
1 "trr" ""
1 "vay" ""
1 "vaz" ""
1 "aso" NA
1 "apq" ""
1 "ocr" NA
1 "asr" NA
2 "qwe" 68 "Sta2"_953/850 0 8 1967 923372.70 890518.10
2 "ors" "" "Sta2"_953/850 0 8 1967 923372.70 890518.10
etc....
dubcek
Messages postés
18767
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
5 mars 2025
5 628
Modifié par dubcek le 4/05/2012 à 14:40
Modifié par dubcek le 4/05/2012 à 14:40
essaye
$ awk 'NR==FNR{i=$1 ; $1="" ;x[i]=$0 ; next}{print $0, x[$1]}' fichier2 fchier1 ID" "Vsp" "Vnb" 1 "qwe" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50 1 "ors" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50 1 "arg" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50 1 "baf" "" "Sta1"_972/840 17 8 1975 982050.00 846926.50 1 "bst" 12 "Sta1"_972/840 17 8 1975 982050.00 846926.50 ... 1 "ocr" NA "Sta1"_972/840 17 8 1975 982050.00 846926.50 1 "asr" NA "Sta1"_972/840 17 8 1975 982050.00 846926.50 2 "qwe" 68 "Sta2"_953/850 0 8 1967 923372.70 890518.10 2 "ors" "" "Sta2"_953/850 0 8 1967 923372.70 890518.10 $
Alors cette commande : awk 'NR==FNR{i=$1 ; $1="" ;x[i]=$0 ; next}{print $0, x[$1]}' fichier2 fchier1 fonctionne bien oui, super, merci pour ta patience... Le plus dur reste à faire : comprendre comment ça marche, mais ça, il n'y a que moi qui puisse faire quelque chose ^^
En attendant ça m'aura fait découvrir cygwin, R, et sqlite :-)
Je coche comme résolu. (edit : ah et bien en tant que simple visiteur je ne peux pas en fait. Si un modérateur aurait envie de passer le sujet en résolu, il le peut.)
Et vous souhaite un excellent week-end.
En attendant ça m'aura fait découvrir cygwin, R, et sqlite :-)
Je coche comme résolu. (edit : ah et bien en tant que simple visiteur je ne peux pas en fait. Si un modérateur aurait envie de passer le sujet en résolu, il le peut.)
Et vous souhaite un excellent week-end.