Parcours de fichier (avec blancs) et ajout de caracteres
15 réponses
ozzii
Bonjour,
J'ai ceci sur sun (solaris):
#! /usr/bin/ksh
IFS=3D""
while read ligne
do
cc=3D`echo "$ligne"|cut -c120-120`
case $cc in
1) nli=3D"1"$ligne;;
*) nli=3D" "$ligne;;
esac
echo "${nli}"
done <$1
exit
Ce que je voudrais, c'est ajouter le chiffre 1 en d=E9but de ligne quand
je trouve 1 en position 120 et sinon rajouter un blanc. Tout ceci est
OK, mais cela prend un temps fou. Pour un fichier mis=E9reux de 3M, il
me met + de 10min.
Sinon, la moiti=E9 de mon probl=E8me c'est de faire un sed pour rajouter
un blanc en d=E9but de chaque ligne (et cela prend 1 sec). Mais il faut
quand m=EAme que je reparcours mon fichier pour faire la recherche du 1
en position 120.
Est-ce que quelqu'un =E0 une solution pour acc=E9l=E9rer le processus ?
#! /usr/bin/ksh IFS="" while read ligne do cc=`echo "$ligne"|cut -c120-120` case $cc in 1) nli="1"$ligne;; *) nli=" "$ligne;; esac echo "${nli}" done <$1 exit
berk!
Eviter les boucles "while read" en shell!
Ce que je voudrais, c'est ajouter le chiffre 1 en début de ligne quand je trouve 1 en position 120 et sinon rajouter un blanc. Tout ceci est OK, mais cela prend un temps fou. Pour un fichier miséreux de 3M, il me met + de 10min.
Sinon, la moitié de mon problème c'est de faire un sed pour rajouter un blanc en début de chaque ligne (et cela prend 1 sec). Mais il faut quand même que je reparcours mon fichier pour faire la recherche du 1 en position 120. [...]
command -p sed ' /^.{119}1/{ s/^/1/ b } s/^/ /'
-- Stéphane
2007-01-12, 01:37(-08), ozzii:
Bonjour,
J'ai ceci sur sun (solaris):
#! /usr/bin/ksh
IFS=""
while read ligne
do
cc=`echo "$ligne"|cut -c120-120`
case $cc in
1) nli="1"$ligne;;
*) nli=" "$ligne;;
esac
echo "${nli}"
done <$1
exit
berk!
Eviter les boucles "while read" en shell!
Ce que je voudrais, c'est ajouter le chiffre 1 en début de ligne quand
je trouve 1 en position 120 et sinon rajouter un blanc. Tout ceci est
OK, mais cela prend un temps fou. Pour un fichier miséreux de 3M, il
me met + de 10min.
Sinon, la moitié de mon problème c'est de faire un sed pour rajouter
un blanc en début de chaque ligne (et cela prend 1 sec). Mais il faut
quand même que je reparcours mon fichier pour faire la recherche du 1
en position 120.
[...]
#! /usr/bin/ksh IFS="" while read ligne do cc=`echo "$ligne"|cut -c120-120` case $cc in 1) nli="1"$ligne;; *) nli=" "$ligne;; esac echo "${nli}" done <$1 exit
berk!
Eviter les boucles "while read" en shell!
Ce que je voudrais, c'est ajouter le chiffre 1 en début de ligne quand je trouve 1 en position 120 et sinon rajouter un blanc. Tout ceci est OK, mais cela prend un temps fou. Pour un fichier miséreux de 3M, il me met + de 10min.
Sinon, la moitié de mon problème c'est de faire un sed pour rajouter un blanc en début de chaque ligne (et cela prend 1 sec). Mais il faut quand même que je reparcours mon fichier pour faire la recherche du 1 en position 120. [...]
command -p sed ' /^.{119}1/{ s/^/1/ b } s/^/ /'
-- Stéphane
Stephane Chazelas
2007-01-12, 09:43(+00), Stephane Chazelas: [...]
command -p sed ' /^.{119}1/{ s/^/1/ b } s/^/ /'
Ou encore:
command -p sed 's/^/ /;/^.{119}1/s/./1/'
command -p, c'est pour invoquer la version standard de la commande sed, que Solaris s'obstine a mettre ailleurs que dans /bin ou /usr/bin.
-- Stéphane
2007-01-12, 09:43(+00), Stephane Chazelas:
[...]
command -p sed '
/^.{119}1/{
s/^/1/
b
}
s/^/ /'
Ou encore:
command -p sed 's/^/ /;/^.{119}1/s/./1/'
command -p, c'est pour invoquer la version standard de la
commande sed, que Solaris s'obstine a mettre ailleurs que dans
/bin ou /usr/bin.