Parser deux fichiers dans script sh
Résolu/Fermé
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
-
Modifié le 16 mai 2018 à 11:36
Utilisateur anonyme - 17 mai 2018 à 21:53
Utilisateur anonyme - 17 mai 2018 à 21:53
A voir également:
- Parser deux fichiers dans script sh
- Script vidéo youtube - Guide
- Fusionner deux fichiers excel - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Comment faire deux colonnes indépendantes dans word - Guide
- Deux ecran pc - Guide
3 réponses
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
Modifié le 17 mai 2018 à 11:29
Modifié le 17 mai 2018 à 11:29
Salut,
Bon, c'est dégeullasse mais ça a l'air de fonctionné.
edit : Par dégeullase, je veux dire pas opti, executer un script comme celui-ci sur des fichiers de plusieurs centaine de Mo serait relativement long..
1) Mettre en forme le fichier2 pour quil ressemble au premier.
2) lire le fichier1 ligne par ligne, et chercher une correspondance dans notre fichier mise en forme
3) Si une correspondance est trouvée, on remplace "site" dans notre fichier mise en forme, par le site reel (marseille, bordeaux etc...).
!! Ne pas inversé fichier1 et fichier2 depuis ton exemple.
A plus
Bon, c'est dégeullasse mais ça a l'air de fonctionné.
edit : Par dégeullase, je veux dire pas opti, executer un script comme celui-ci sur des fichiers de plusieurs centaine de Mo serait relativement long..
1) Mettre en forme le fichier2 pour quil ressemble au premier.
2) lire le fichier1 ligne par ligne, et chercher une correspondance dans notre fichier mise en forme
3) Si une correspondance est trouvée, on remplace "site" dans notre fichier mise en forme, par le site reel (marseille, bordeaux etc...).
!! Ne pas inversé fichier1 et fichier2 depuis ton exemple.
#!/bin/bash # doit.sh # test -n "$3" || { echo "$0 <fichier_1> <fichier_2> <fichier_output>"; exit 1; } RND1="$(( ( RANDOM % 100000 ) + 10000 ))" RND2="$(( ( RANDOM % 100000 ) + 10000 ))" touch /tmp/${RND1} touch /tmp/${RND2} while read -r line do echo $line | awk -F '\\|' '{ print $2 "|" $1 "|" "site" "|" $4 "|" $5 "|" $6 }' >> /tmp/${RND1} done < $2 cat "$1" |while read -r line do site=`echo $line | awk -F '\\|' '{ printf $3 }'` tmp=`echo $line | awk -F '\\|' '{ print $1 "|" $2 "|" "site" "|" $4 }'` count=$(cat "/tmp/${RND1}" |grep "$tmp" |wc -l) if [[ $count = 1 ]] then cat "/tmp/${RND1}" |grep "$tmp" |awk -v site="$site" -F '\\|' '{ print $1 "|" $2 "|" site "|" $4 "|" $5 "|" $6 }' >> /tmp/${RND2} fi done /bin/cp "/tmp/${RND2}" "$3" /bin/rm "/tmp/${RND1}" /bin/rm "/tmp/${RND2}"
A plus
pcsystemd
Messages postés
702
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
6 novembre 2024
23
17 mai 2018 à 15:03
17 mai 2018 à 15:03
Merci Exileur.
Je vais m'appuyer sur ton exemple.
Je vais m'appuyer sur ton exemple.
Utilisateur anonyme
17 mai 2018 à 16:38
17 mai 2018 à 16:38
salut,
une seule commande pour faire ce qui est demandé :
une seule commande pour faire ce qui est demandé :
join
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
Modifié le 17 mai 2018 à 17:47
Modifié le 17 mai 2018 à 17:47
Salut,
Non, ça ne le fera pas, faut bien lire la demande ;-\
Non, ça ne le fera pas, faut bien lire la demande ;-\
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
150
17 mai 2018 à 17:49
17 mai 2018 à 17:49
Merci pour la commande, je ne l'a connaissais pas !
Je vais voir ce qui est faisable avec !
En attendant, ma methode fonctionne :)
Je vais voir ce qui est faisable avec !
En attendant, ma methode fonctionne :)
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
>
Exileur
Messages postés
1475
Date d'inscription
mercredi 31 août 2011
Statut
Membre
Dernière intervention
16 décembre 2022
17 mai 2018 à 17:55
17 mai 2018 à 17:55
Salut,
C'est faisable avec
C'est faisable avec
joinqu'à certaines conditions, notamment s'il n'y a qu'un seul champ commun à prendre en compte, mais ce n'est pas le cas de notre ami (3 champs en commun pour valider la jointure).
Utilisateur anonyme
>
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
17 mai 2018 à 20:36
17 mai 2018 à 20:36
en effet,
bon, une seule commande, alors, pour faire ce qui est demandé :
XD
joinne suffira pas.
bon, une seule commande, alors, pour faire ce qui est demandé :
awk.
XD
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 418
>
Utilisateur anonyme
17 mai 2018 à 21:21
17 mai 2018 à 21:21
En effet, et pour ça, reste plus qu'à attendre le maître en la matière : dubcek ;-)
Sinon, pour le fun et illustrer mes propos :
Sinon, pour le fun et illustrer mes propos :
$ join -t'|' -1 1 -2 2 -o 1.1,1.2,1.3,1.4,2.5,2.6 <(sort -t '|' -n -k1 f1) <(sort -t '|' -n -k2 f2)
354|Titi|MARSEILLES|www.autredomaine.com|705|379
2543|Toto|PARIS|www.mondomaine.fr|5274|3646
3486|Tutu|BORDEAUX|www.monsite.com|2317|1508
17 mai 2018 à 16:38