Si je fais "grep 'toto' data.dat" j'obtiens : "toto : 1 toto : 12"
J'aimerais avoir comme résultat : "1 12"
Savez-vous comment je pourrais procéder ?
[...]
awk '$1 == "toto" {print $3}'
ou
sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p'
-- Stéphane- Masquer le texte des messages précédents -
- Afficher le texte des messages précédents -
Ok je ne connaissais pas du tout ces commandes, ça marche impec ! Merci beaucoup !
Donut
Cyrille Lefevre
On 10 juin, 16:19, Stephane CHAZELAS wrote:
2008-06-10, 07:08(-07), : [...]
Si je fais "grep 'toto' data.dat" j'obtiens : "toto : 1 toto : 12" J'aimerais avoir comme résultat : "1 12" Savez-vous comment je pourrais procéder ? [...]
awk '$1 == "toto" {print $3}'
ou
sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p'
Bonjour,
il y a aussi :
while read var colon value; do case ${var} in 'toto') echo "${value}" ;; esac
les puristes te dirons de remplacer echo par : printf "%sn" "${value}" en ksh, il y a aussi : print -r -- "${value}" qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas d e printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quote r toutes les variables inutilement dans ce contexte car ça rend la lectur e plus lourde...
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
On 10 juin, 16:19, Stephane CHAZELAS <stephane_chaze...@yahoo.fr>
wrote:
Si je fais "grep 'toto' data.dat" j'obtiens :
"toto : 1
toto : 12"
J'aimerais avoir comme résultat :
"1
12"
Savez-vous comment je pourrais procéder ?
[...]
awk '$1 == "toto" {print $3}'
ou
sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p'
Bonjour,
il y a aussi :
while read var colon value; do
case ${var} in
'toto') echo "${value}" ;;
esac
les puristes te dirons de remplacer echo par : printf "%sn" "${value}"
en ksh, il y a aussi : print -r -- "${value}"
qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas d e
printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et
qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quote r
toutes les variables inutilement dans ce contexte car ça rend la lectur e
plus lourde...
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
Si je fais "grep 'toto' data.dat" j'obtiens : "toto : 1 toto : 12" J'aimerais avoir comme résultat : "1 12" Savez-vous comment je pourrais procéder ? [...]
awk '$1 == "toto" {print $3}'
ou
sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p'
Bonjour,
il y a aussi :
while read var colon value; do case ${var} in 'toto') echo "${value}" ;; esac
les puristes te dirons de remplacer echo par : printf "%sn" "${value}" en ksh, il y a aussi : print -r -- "${value}" qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas d e printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quote r toutes les variables inutilement dans ce contexte car ça rend la lectur e plus lourde...
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Stephane CHAZELAS
2008-06-11, 02:52(+02), Cyrille Lefevre: [....]
il y a aussi :
while read var colon value; do case ${var} in 'toto') echo "${value}" ;; esac
les puristes te dirons de remplacer echo par : printf "%sn" "${value}" en ksh,
pas seulement en ksh.
il y a aussi : print -r -- "${value}" qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas de printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quoter toutes les variables inutilement dans ce contexte car ça rend la lecture plus lourde... [...]
[ toto = "$var" ] est plus court et portable.
Maintenant, d'autres puristes te diront qu'executer 3 ou 4 commandes pour chaque ligne d'un fichier n'est pas tres elegant (et inefficace) comparé a juste une commande sed ou une commande awk ou encore que "read" sans "-r" fait un traitement particulier des backslashs (mais de toute facon l'emploi d'echo fait que les backslashs poseront probleme anyway).
-- Stéphane
2008-06-11, 02:52(+02), Cyrille Lefevre:
[....]
il y a aussi :
while read var colon value; do
case ${var} in
'toto') echo "${value}" ;;
esac
les puristes te dirons de remplacer echo par : printf "%sn" "${value}"
en ksh,
pas seulement en ksh.
il y a aussi : print -r -- "${value}"
qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas de
printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et
qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quoter
toutes les variables inutilement dans ce contexte car ça rend la lecture
plus lourde...
[...]
[ toto = "$var" ] est plus court et portable.
Maintenant, d'autres puristes te diront qu'executer 3 ou 4
commandes pour chaque ligne d'un fichier n'est pas tres elegant
(et inefficace) comparé a juste une commande sed ou une commande
awk ou encore que "read" sans "-r" fait un traitement
particulier des backslashs (mais de toute facon l'emploi d'echo
fait que les backslashs poseront probleme anyway).
les puristes te dirons de remplacer echo par : printf "%sn" "${value}" en ksh,
pas seulement en ksh.
il y a aussi : print -r -- "${value}" qui a l'avantage d'être une builtin, ce qui n'est pas toujours le cas de printf.
d'autres puristes te dirons aussi que [[... ]] n'est pas portable et qu'il faut écrite [ "${var}" = 'toto' ], mais ça me gonfle de quoter toutes les variables inutilement dans ce contexte car ça rend la lecture plus lourde... [...]
[ toto = "$var" ] est plus court et portable.
Maintenant, d'autres puristes te diront qu'executer 3 ou 4 commandes pour chaque ligne d'un fichier n'est pas tres elegant (et inefficace) comparé a juste une commande sed ou une commande awk ou encore que "read" sans "-r" fait un traitement particulier des backslashs (mais de toute facon l'emploi d'echo fait que les backslashs poseront probleme anyway).
-- Stéphane
Cyrille Lefevre
Maintenant, d'autres puristes te diront qu'executer 3 ou 4 commandes pour chaque ligne d'un fichier n'est pas tres elegant (et inefficace) comparé a juste une commande sed ou une commande awk ou encore que "read" sans "-r" fait un traitement particulier des backslashs (mais de toute facon l'emploi d'echo fait que les backslashs poseront probleme anyway).
tu as raison, j'avais oublié le -r.
pour autant :
$ wc toto 37554 112662 337986 toto
# bash 3.2.33 (cygwin) avec echo (-e ou -E ne change rien !) $ cat x while read -r var colon value; do [[ ${var} = 'toto' ]] && echo -E "${value}" done < toto $ time ./x > /dev/null
real 0m16.928s user 0m4.320s sys 0m12.213s
# bash avec printf "%sn" "${var}" $ time ./x > /dev/null
real 0m11.491s user 0m2.995s sys 0m9.219s
# pdksh 5.2.14 (cygwin) $ cat x while read -r var colon value; do [[ ${var} = 'toto' ]] && print -r -- "${value}" done < toto $ time ./x > /dev/null
real 0m3.190s user 0m0.405s sys 0m2.729s
# ksh88 from irix (cygwin) $ time ./x > /dev/null
real 0m0.327s user 0m0.233s sys 0m0.077s
# ksh93s (cygwin) $ time ./x > /dev/null
real 0m0.366s user 0m0.265s sys 0m0.062s
# zsh 4.3.4 (cygwin) $ time ./x > /dev/null
real 0m13.314s user 0m2.479s sys 0m11.014s
# gawk 3.1.6 (cygwin) $ time awk '$1 == "toto" {print $3}' toto > /dev/null
real 0m0.438s user 0m0.093s sys 0m0.093s
# gsed 4.1.5 (cygwin) $ time sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p' toto > /dev/null
real 0m0.206s user 0m0.078s sys 0m0.062s
sed est pas mal, mais le ksh se défend bien par rapport à awk, bash à la ramasse, comme d'hab, zsh pas beaucoup mieux, pdksh un peu mieux.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Maintenant, d'autres puristes te diront qu'executer 3 ou 4
commandes pour chaque ligne d'un fichier n'est pas tres elegant
(et inefficace) comparé a juste une commande sed ou une commande
awk ou encore que "read" sans "-r" fait un traitement
particulier des backslashs (mais de toute facon l'emploi d'echo
fait que les backslashs poseront probleme anyway).
tu as raison, j'avais oublié le -r.
pour autant :
$ wc toto
37554 112662 337986 toto
# bash 3.2.33 (cygwin) avec echo (-e ou -E ne change rien !)
$ cat x
while read -r var colon value; do
[[ ${var} = 'toto' ]] && echo -E "${value}"
done < toto
$ time ./x > /dev/null
real 0m16.928s
user 0m4.320s
sys 0m12.213s
# bash avec printf "%sn" "${var}"
$ time ./x > /dev/null
real 0m11.491s
user 0m2.995s
sys 0m9.219s
# pdksh 5.2.14 (cygwin)
$ cat x
while read -r var colon value; do
[[ ${var} = 'toto' ]] && print -r -- "${value}"
done < toto
$ time ./x > /dev/null
real 0m3.190s
user 0m0.405s
sys 0m2.729s
# ksh88 from irix (cygwin)
$ time ./x > /dev/null
real 0m0.327s
user 0m0.233s
sys 0m0.077s
# ksh93s (cygwin)
$ time ./x > /dev/null
real 0m0.366s
user 0m0.265s
sys 0m0.062s
# zsh 4.3.4 (cygwin)
$ time ./x > /dev/null
real 0m13.314s
user 0m2.479s
sys 0m11.014s
# gawk 3.1.6 (cygwin)
$ time awk '$1 == "toto" {print $3}' toto > /dev/null
real 0m0.438s
user 0m0.093s
sys 0m0.093s
# gsed 4.1.5 (cygwin)
$ time sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p' toto > /dev/null
real 0m0.206s
user 0m0.078s
sys 0m0.062s
sed est pas mal, mais le ksh se défend bien par rapport à awk,
bash à la ramasse, comme d'hab, zsh pas beaucoup mieux, pdksh
un peu mieux.
Regards, Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Maintenant, d'autres puristes te diront qu'executer 3 ou 4 commandes pour chaque ligne d'un fichier n'est pas tres elegant (et inefficace) comparé a juste une commande sed ou une commande awk ou encore que "read" sans "-r" fait un traitement particulier des backslashs (mais de toute facon l'emploi d'echo fait que les backslashs poseront probleme anyway).
tu as raison, j'avais oublié le -r.
pour autant :
$ wc toto 37554 112662 337986 toto
# bash 3.2.33 (cygwin) avec echo (-e ou -E ne change rien !) $ cat x while read -r var colon value; do [[ ${var} = 'toto' ]] && echo -E "${value}" done < toto $ time ./x > /dev/null
real 0m16.928s user 0m4.320s sys 0m12.213s
# bash avec printf "%sn" "${var}" $ time ./x > /dev/null
real 0m11.491s user 0m2.995s sys 0m9.219s
# pdksh 5.2.14 (cygwin) $ cat x while read -r var colon value; do [[ ${var} = 'toto' ]] && print -r -- "${value}" done < toto $ time ./x > /dev/null
real 0m3.190s user 0m0.405s sys 0m2.729s
# ksh88 from irix (cygwin) $ time ./x > /dev/null
real 0m0.327s user 0m0.233s sys 0m0.077s
# ksh93s (cygwin) $ time ./x > /dev/null
real 0m0.366s user 0m0.265s sys 0m0.062s
# zsh 4.3.4 (cygwin) $ time ./x > /dev/null
real 0m13.314s user 0m2.479s sys 0m11.014s
# gawk 3.1.6 (cygwin) $ time awk '$1 == "toto" {print $3}' toto > /dev/null
real 0m0.438s user 0m0.093s sys 0m0.093s
# gsed 4.1.5 (cygwin) $ time sed -n 's/^toto[[:blank:]]*:[[:blank:]]*//p' toto > /dev/null
real 0m0.206s user 0m0.078s sys 0m0.062s
sed est pas mal, mais le ksh se défend bien par rapport à awk, bash à la ramasse, comme d'hab, zsh pas beaucoup mieux, pdksh un peu mieux.
Regards, Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre. remove "%nospam" and ".invalid" to answer me.
Stephane CHAZELAS
2008-06-13, 00:39(+02), Cyrille Lefevre: [...]
sed est pas mal, mais le ksh se défend bien par rapport à awk, bash à la ramasse, comme d'hab, zsh pas beaucoup mieux, pdksh un peu mieux. [...]
Ce qu'il faut regarder, c'est user+sys, real prend en compte le temps passé a executer d'autres commandes sur le systeme.
Tu trouveras que les shells basé sur ash sont les plus rapides dans ce genre d'exercice.
Je maintiens que les shells n'ont pas ete concus pour etre utilisé comme ca.
-- Stéphane
2008-06-13, 00:39(+02), Cyrille Lefevre:
[...]
sed est pas mal, mais le ksh se défend bien par rapport à awk,
bash à la ramasse, comme d'hab, zsh pas beaucoup mieux, pdksh
un peu mieux.
[...]
Ce qu'il faut regarder, c'est user+sys, real prend en compte le
temps passé a executer d'autres commandes sur le systeme.
Tu trouveras que les shells basé sur ash sont les plus rapides
dans ce genre d'exercice.
Je maintiens que les shells n'ont pas ete concus pour etre
utilisé comme ca.