Problème avec Sort -Unix -débutant
Résolu/Fermé
A voir également:
- Problème avec Sort -Unix -débutant
- Aucun son ne sort de mon pc - Guide
- Logiciel de programmation pour débutant - Guide
- Je branche mes écouteurs mais le son sort du téléphone iphone - Forum Samsung
- Ma souris sort de l'écran en jeu - Forum jeux en ligne
- Tirage au sort excel aléatoire sans doublon ✓ - Forum Excel
5 réponses
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
23 nov. 2010 à 16:44
23 nov. 2010 à 16:44
Salut,
En partant sur ton fichier 3 :
;-))
En partant sur ton fichier 3 :
$ cat fich A1234 Dupont Pierre Paris 01/11/2010 L B5678 Pondu jean Paris 01/11/2010 F C4321 Durant Paul Lyon 12/10/2010 L D9876 Randu Eric Marseille 26/02/2010 L E6541 Jardin Léa Toulouse 16/08/2010 F A1234 Dupont Pierre Cologne 01/11/2010 F $ sort -k 1 fich | uniq -w 5 A1234 Dupont Pierre Cologne 01/11/2010 F B5678 Pondu jean Paris 01/11/2010 F C4321 Durant Paul Lyon 12/10/2010 L D9876 Randu Eric Marseille 26/02/2010 L E6541 Jardin Léa Toulouse 16/08/2010 F $
;-))
spacm
Messages postés
141
Date d'inscription
vendredi 1 juin 2007
Statut
Membre
Dernière intervention
30 août 2016
30
23 nov. 2010 à 15:31
23 nov. 2010 à 15:31
tu utilises un tableau associatif pour faire le ménage.
ligne 1:
x[A1234]= A1234 Dupont Pierre Cologne 01/11/2010 F
ligne 2:
x[A1234]=A1234 Dupont Pierre Paris 01/11/2010 L
celui de cologne se trouve éliminé.
si tu trie ton fichier dans l'autre sens, ça devrais résoudre le problème
sort -o Fichier 3 -rK 1 Fichier 1
(-r pour reverse)
ligne 1:
x[A1234]= A1234 Dupont Pierre Cologne 01/11/2010 F
ligne 2:
x[A1234]=A1234 Dupont Pierre Paris 01/11/2010 L
celui de cologne se trouve éliminé.
si tu trie ton fichier dans l'autre sens, ça devrais résoudre le problème
sort -o Fichier 3 -rK 1 Fichier 1
(-r pour reverse)
Merci pour cette réponse rapide !!!
J'ai fait le test est ça fonctionne sauf que je me rend compte que le tri reste aléatoire à savoir que le tri se fait sur l'ensemble de de la ligne.
pour faire plus simple :
moi je souhaite que ce soit toujours la ligne du fichier 2 qui soit conserver.
or je me rend compte que le tri ne se fait pas forcement comme suit:
ligne fichier 1
ligne fichier 2
mais plutot par ordre aphalbétique. Si par exemple on a:
ligne fichier 1 : A1234,bbbbb
ligne fichier 2 : A1234,abbbb
Si je fais un sort, j'aurai :
ligne fichier 2: A1234,abbbb
ligne fichier 1: A1234,bbbbb
donc même si j'inverse, je ne serai jamais sur d'avoir garder la ligne du fichier 2.
Donc Help ME !!!!!
merci beaucoup.
J'ai fait le test est ça fonctionne sauf que je me rend compte que le tri reste aléatoire à savoir que le tri se fait sur l'ensemble de de la ligne.
pour faire plus simple :
moi je souhaite que ce soit toujours la ligne du fichier 2 qui soit conserver.
or je me rend compte que le tri ne se fait pas forcement comme suit:
ligne fichier 1
ligne fichier 2
mais plutot par ordre aphalbétique. Si par exemple on a:
ligne fichier 1 : A1234,bbbbb
ligne fichier 2 : A1234,abbbb
Si je fais un sort, j'aurai :
ligne fichier 2: A1234,abbbb
ligne fichier 1: A1234,bbbbb
donc même si j'inverse, je ne serai jamais sur d'avoir garder la ligne du fichier 2.
Donc Help ME !!!!!
merci beaucoup.
Merci pour vos différentes réponses et solutions.
Etant donné que je dans tous les cas je ne peux pas avoir un contrôle sur l'ordre du trie, je me suis dis que je pouvais dans ce cas le forcer moi-même en ajoutant un indice juste après le matricule.
mon matricule étant unique j'aurai donc ainsi et en limitant la clé du tri sur le matricule jusuq'à l'indice:
Fichier 1
Matricule nom prenom ville date témoin
A1234 Dupont Pierre Paris 01/11/2010 L
B5678 Pondu jean Paris 01/11/2010 F
C4321 Durant Paul Lyon 12/10/2010 L
D9876 Randu Eric Marseille 26/02/2010 L
E6541 Jardin Léa Toulouse 16/08/2010 F
Fichier 2
A1234 Dupont Pierre Cologne 01/11/2010 F
ici commande pour rajouter l'indice
Fichier 1
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
Fichier 2
A12342 Dupont Pierre Cologne 01/11/2010 F
puis cat Fichier 2 >> Fichier 1
Resultat:
Fichier 1
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
A12342 Dupont Pierre Cologne 01/11/2010 F
sort -o Fichier 3 -K 1 6 Fichier 1
Resultat:
Fichier 3
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
A12342 Dupont Pierre Cologne 01/11/2010 F
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
cat Fichier 3| awk -F";" '/Matricule/ {print $0;next} ; {x[$1]=$0} ; END{for( n in x)print x[n]}' > Fichier 4
Resultat:
Fichier 4
Matricule nom prenom ville date témoin
A12342 Dupont Pierre Cologne 01/11/2010 F
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
ici commande pour retirer les indices
A1234 Dupont Pierre Cologne 01/11/2010 F
B5678 Pondu jean Paris 01/11/2010 F
C4321 Durant Paul Lyon 12/10/2010 L
D9876 Randu Eric Marseille 26/02/2010 L
E6541 Jardin Léa Toulouse 16/08/2010 F
maintenant reste plus qu'a savoir comment mettre et retirer cette indice.
Vous en penser quoi ? quelqu'un peut m'éclairer sur l'ecriture de ces deux commande ?
Merci d'avance.
Etant donné que je dans tous les cas je ne peux pas avoir un contrôle sur l'ordre du trie, je me suis dis que je pouvais dans ce cas le forcer moi-même en ajoutant un indice juste après le matricule.
mon matricule étant unique j'aurai donc ainsi et en limitant la clé du tri sur le matricule jusuq'à l'indice:
Fichier 1
Matricule nom prenom ville date témoin
A1234 Dupont Pierre Paris 01/11/2010 L
B5678 Pondu jean Paris 01/11/2010 F
C4321 Durant Paul Lyon 12/10/2010 L
D9876 Randu Eric Marseille 26/02/2010 L
E6541 Jardin Léa Toulouse 16/08/2010 F
Fichier 2
A1234 Dupont Pierre Cologne 01/11/2010 F
ici commande pour rajouter l'indice
Fichier 1
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
Fichier 2
A12342 Dupont Pierre Cologne 01/11/2010 F
puis cat Fichier 2 >> Fichier 1
Resultat:
Fichier 1
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
A12342 Dupont Pierre Cologne 01/11/2010 F
sort -o Fichier 3 -K 1 6 Fichier 1
Resultat:
Fichier 3
Matricule nom prenom ville date témoin
A12341 Dupont Pierre Paris 01/11/2010 L
A12342 Dupont Pierre Cologne 01/11/2010 F
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
cat Fichier 3| awk -F";" '/Matricule/ {print $0;next} ; {x[$1]=$0} ; END{for( n in x)print x[n]}' > Fichier 4
Resultat:
Fichier 4
Matricule nom prenom ville date témoin
A12342 Dupont Pierre Cologne 01/11/2010 F
B56781 Pondu jean Paris 01/11/2010 F
C43211 Durant Paul Lyon 12/10/2010 L
D98761 Randu Eric Marseille 26/02/2010 L
E65411 Jardin Léa Toulouse 16/08/2010 F
ici commande pour retirer les indices
A1234 Dupont Pierre Cologne 01/11/2010 F
B5678 Pondu jean Paris 01/11/2010 F
C4321 Durant Paul Lyon 12/10/2010 L
D9876 Randu Eric Marseille 26/02/2010 L
E6541 Jardin Léa Toulouse 16/08/2010 F
maintenant reste plus qu'a savoir comment mettre et retirer cette indice.
Vous en penser quoi ? quelqu'un peut m'éclairer sur l'ecriture de ces deux commande ?
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
24 nov. 2010 à 15:04
24 nov. 2010 à 15:04
Re-
Avec "sed" :
Le ".bak" sert à créer une copie du fichier original (renommer en nom_fichier.ext.bak) au cas ou...
;-))
Avec "sed" :
$ cat plop A1234 Dupont Pierre Paris 01/11/2010 L B5678 Pondu jean Paris 01/11/2010 F C4321 Durant Paul Lyon 12/10/2010 L D9876 Randu Eric Marseille 26/02/2010 L E6541 Jardin Léa Toulouse 16/08/2010 F $ sed -i.bak 's/ /1&/' plop $ cat plop A12341 Dupont Pierre Paris 01/11/2010 L B56781 Pondu jean Paris 01/11/2010 F C43211 Durant Paul Lyon 12/10/2010 L D98761 Randu Eric Marseille 26/02/2010 L E65411 Jardin Léa Toulouse 16/08/2010 F $
Le ".bak" sert à créer une copie du fichier original (renommer en nom_fichier.ext.bak) au cas ou...
;-))
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
Modifié par zipe31 le 24/11/2010 à 17:46
Modifié par zipe31 le 24/11/2010 à 17:46
sed -i.orig 's/ /\x08&/' fichier
Ou si tu as créer le fichier.bak :
mv -f nom_fichier.ext.bak nom_fichier.ext
Hello,
j'ai fait des test et je n'arrive pas à faire fonctionner ton sed. En regardant de plus près,
j'ai vu que j'avais oublié un détail important (peut être). Mes fichiers sont des fichiers CSV avec comme séparateur de ";" au lieu des espaces comme sur mes exemples.
Cela ne change t-il pas les choses en sachant que je veux mettre un indice à la fin du premier champs de chaque ligne ?
Merci d'avance.
j'ai fait des test et je n'arrive pas à faire fonctionner ton sed. En regardant de plus près,
j'ai vu que j'avais oublié un détail important (peut être). Mes fichiers sont des fichiers CSV avec comme séparateur de ";" au lieu des espaces comme sur mes exemples.
Cela ne change t-il pas les choses en sachant que je veux mettre un indice à la fin du premier champs de chaque ligne ?
Merci d'avance.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 420
25 nov. 2010 à 13:50
25 nov. 2010 à 13:50
Pour mettre l'indice :
Pour l'enlever :
sed 's/;/1&/'
Pour l'enlever :
sed 's/;/\x08&/'
24 nov. 2010 à 12:22
Avec ta commande, ce qui détermine le choix de la bonne ligne c'est l'ordre de concaténation ??
24 nov. 2010 à 12:23