Trie fichier avec SED ou AWK
Résolu/Fermé
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
-
25 févr. 2009 à 15:04
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 4 mars 2009 à 11:40
pcsystemd Messages postés 691 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 15 janvier 2024 - 4 mars 2009 à 11:40
A voir également:
- Trie fichier avec SED ou AWK
- Fichier rar - Guide
- Fichier host - Guide
- Fichier iso - Guide
- Comment réduire la taille d'un fichier - Guide
- Ouvrir fichier .bin - Guide
12 réponses
gigaga
Messages postés
2346
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2014
301
25 févr. 2009 à 15:10
25 févr. 2009 à 15:10
Tu ouvres ton fichier avec vim et tu tapes :
:%s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\) .*/update table set champ=0 where comp=\1;/g
:%s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\) .*/update table set champ=0 where comp=\1;/g
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
25 févr. 2009 à 16:15
25 févr. 2009 à 16:15
hello
avec awk
avec awk
awk 'BEGIN {FS=OFS="|"} ; /\|/ {$2=sprintf(" update table set champ=0 where comp=%d ",$2)} ; {print $0}' < fichier
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
25 févr. 2009 à 16:19
25 févr. 2009 à 16:19
Salut,
C'est pas "{ print $2 }" plutôt ?
Sinon avec "sed" :
C'est pas "{ print $2 }" plutôt ?
Sinon avec "sed" :
sed 's/^\s\+[0-9_]\+\s\+|\s\+\([0-9]\+\) .*/update table set champ=0 where comp=\1;/';-))
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
25 févr. 2009 à 16:22
25 févr. 2009 à 16:22
non, je modifie le champ 2 des lignes qui contiennent | et j'imprime toutes les lignes
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
>
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
25 févr. 2009 à 16:26
25 févr. 2009 à 16:26
Ben ce n'est pas ce que demande notre ami il me semble ;-\
[rep]$ cat bar n° id th date 220_714 | 81760 | 0 | 19/01/2010 220_2530 | 76788223 | 0 | 05/05/2006 110_2256 | 81554 | 0 | 19/01/2004 110_2563 | 101701108 | 0 | 18/10/2006 [rep]$ awk 'BEGIN {FS=OFS="|"} ; /\|/ {$2=sprintf(" update table set champ=0 where comp=%d ",$2)} ; {print $0}' < bar n° id th date 220_714 | update table set champ=0 where comp=81760 | 0 | 19/01/2010 220_2530 | update table set champ=0 where comp=76788223 | 0 | 05/05/2006 110_2256 | update table set champ=0 where comp=81554 | 0 | 19/01/2004 110_2563 | update table set champ=0 where comp=101701108 | 0 | 18/10/2006 [rep]$ awk 'BEGIN {FS=OFS="|"} ; /\|/ {$2=sprintf(" update table set champ=0 where comp=%d ",$2)} ; {print $2}' < bar update table set champ=0 where comp=81760 update table set champ=0 where comp=76788223 update table set champ=0 where comp=81554 update table set champ=0 where comp=101701108 [rep]$;-))
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
>
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
25 févr. 2009 à 16:27
25 févr. 2009 à 16:27
ah peut-être, j'ai compris modifier la colonne id mais garder le reste
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
>
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
25 févr. 2009 à 16:30
25 févr. 2009 à 16:30
Ben au moins comme ça il aura la totale ;-)))
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
25 févr. 2009 à 16:56
25 févr. 2009 à 16:56
Merci a tous pour les différentes façon de faire. Je vais toutes les testées et je reviens vers vous .
Merci encore
Merci encore
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mars 2009 à 17:15
3 mars 2009 à 17:15
en faites j'ai pas du tout comprendre puisque j'ai fait des essais sur d'autres fichiers mais cela ne fonctionne pas
Le contenu de mon fichier :
j'ai fait un
mais j'ai comme résultat
Ou est l'erreur et si je peux avoir quelques explications ce serait chouette?
Merci beaucoup
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Le contenu de mon fichier :
n° id th dft toto | 81760 | 01 02 03 04 06 | 540_256 220_2530 | tata | 02 65 45 25 26 | 654_589 110_2256 | 81554 | 02 54 68 54 26 | 202_2546 titi | tutu | 06 54 85 98 45 | 100_5648
j'ai fait un
awk 'BEGIN {FS=OFS="|"} ; /\|/ {$2=sprintf(" update table set st=1 where ref in (select uid from toto where euid='%d') and refari=140340034",$2)} ; {print $2}' <Liste.txt
mais j'ai comme résultat
update table set st=1 where ref in (select uid from toto where euid=0) and refari=140340034 update table set st=1 where ref in (select uid from toto where euid=0) and refari=140340034 update table set st=1 where ref in (select uid from toto where euid=0) and refari=140340034 update table set st=1 where ref in (select uid from toto where euid=0) and refari=140340034
Ou est l'erreur et si je peux avoir quelques explications ce serait chouette?
Merci beaucoup
L'accès au savoir est la première liberté que chaque homme devrait avoir.
gigaga
Messages postés
2346
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2014
301
3 mars 2009 à 17:18
3 mars 2009 à 17:18
Tu n'as qu'à appliquer la solution que je t'ai proposé...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
3 mars 2009 à 17:30
3 mars 2009 à 17:30
essaye avec euid=%d ou euid=\'%d\' si tu veux afficher '
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mars 2009 à 17:43
3 mars 2009 à 17:43
J'avais déjà essayé ta méthode Gigaga mais cela ne fonctionnait pas j'avais comme erreur :
motif introuvable %s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\)
Merci
motif introuvable %s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\)
%s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\) /.*update table set st=1 where ref in (select uid from toto where euid=\1) and refari=140340034;/g
Merci
gigaga
Messages postés
2346
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2014
301
3 mars 2009 à 17:45
3 mars 2009 à 17:45
ouvre ton fichier avec :
vi <tonfichier>
et dans l'éditeur tapes ce que j'ai écris (en commençant par ":")
vi <tonfichier>
et dans l'éditeur tapes ce que j'ai écris (en commençant par ":")
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mars 2009 à 17:48
3 mars 2009 à 17:48
c'est ce que j'ai fait. J 'ai ouvert dans VI mon fichier puis j'ai taper les : et enfin la ligne
et j'ai l'erreur que j'indique plus haut.
Merci
%s/^[0-9_]\+[ \t]\+|[ \t]\+\([0-9]\+\) /.*update table set st=1 where ref in (select uid from toto where euid=\1) and refari=140340034;/g
et j'ai l'erreur que j'indique plus haut.
Merci
gigaga
Messages postés
2346
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2014
301
3 mars 2009 à 17:57
3 mars 2009 à 17:57
Essaie ça :
%s/^[ \t]*.\+[ \t]\+|[ \t]\+\(.\+\)[ \t]\+|[ \t]\+.*[ \t]\+|.*/update table set st=1 where ref in (select uid from toto where euid=\1) and refari=140340034;/g
%s/^[ \t]*.\+[ \t]\+|[ \t]\+\(.\+\)[ \t]\+|[ \t]\+.*[ \t]\+|.*/update table set st=1 where ref in (select uid from toto where euid=\1) and refari=140340034;/g
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mars 2009 à 17:50
3 mars 2009 à 17:50
Dubcek,
j'ai essayé ce que tu m'indiques mais cela ne fonctionne pas. en effet si je saisis euid=%d jle resultat ne change pas et si je saisis euid=\'%d\' j'ai l'erreur suivante :
bash: syntax error near unexpected token `)'
Merci
j'ai essayé ce que tu m'indiques mais cela ne fonctionne pas. en effet si je saisis euid=%d jle resultat ne change pas et si je saisis euid=\'%d\' j'ai l'erreur suivante :
bash: syntax error near unexpected token `)'
Merci
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 895
3 mars 2009 à 18:06
3 mars 2009 à 18:06
Re-
A partir de ton exemple du post #10, quel est le résultat escompté ?
A partir de ton exemple du post #10, quel est le résultat escompté ?
gigaga
Messages postés
2346
Date d'inscription
vendredi 20 juin 2008
Statut
Membre
Dernière intervention
22 août 2014
301
3 mars 2009 à 18:08
3 mars 2009 à 18:08
n° id th dft toto | 81760 | 01 02 03 04 06 | 540_256 220_2530 | tata | 02 65 45 25 26 | 654_589 110_2256 | 81554 | 02 54 68 54 26 | 202_2546 titi | tutu | 06 54 85 98 45 | 100_5648
:%s/^[ \t]*\w\+[ \t]\+|[ \t]\+\(\w\+\)[ \t]\+|[ \t]\+.*[ \t]\+|.*/update table set st=1 where ref in (select uid from toto where euid=\1) and refari=140340034;/g
devient:
n° id th dft update table set st=1 where ref in (select uid from toto where euid=81760) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=tata) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=81554) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=tutu) and refari=140340034;
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
3 mars 2009 à 21:41
3 mars 2009 à 21:41
Merci beaucoup a tous et particulierement a toi Gigaga et milles excuses car je n'ai pas ete clair dans ce que je souhaite. je m'explique donc de nouveau.
je souhaite recuperer la valeur du champ dft de chaque lignes de mon fichier :
afin d'afficher en sortie :
Voila j'espere que je suis plus clair dans ma demande d'aide et encore pardon pour m'être mal expliquer
Merci
je souhaite recuperer la valeur du champ dft de chaque lignes de mon fichier :
n° id th dft toto | 81760 | 01 02 03 04 06 | 540_256 gdtgh | tata | 02 65 45 25 26 | 654_589 jgkgi | 81554 | 02 54 68 54 26 | 202_2546 tuotu | tutu | 06 54 85 98 45 | 100_5648
afin d'afficher en sortie :
update table set st=1 where ref in (select uid from toto where euid=540_256) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=654_589) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=202_2546) and refari=140340034; update table set st=1 where ref in (select uid from toto where euid=100_5648) and refari=140340034;
Voila j'espere que je suis plus clair dans ma demande d'aide et encore pardon pour m'être mal expliquer
Merci
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
4 mars 2009 à 11:40
4 mars 2009 à 11:40
Bon j'ai trouvé , j'ai fait diffèrement :
Merci a tous
awk -F '|' '{print "update table set st=1 where ref in (select uid from toto where euid='\''"$4"'\'') and refari=140340053;"}' Liste.txt > sortie.txt
Merci a tous