Pour qqn qui maîtrise bien awk ;p

2001-03-01 Par sujet Jean-Claude Schopfer

Hellow :)

J'ai un chtit problme pour des convertions sur de gros fichiers
(shell script en ksh)

Je veux convertir par exemple 22 en 00022 (et 1213 en 01213).
Pour cela je peux appliquer une mthode simpliste de ce genre :

NO=22
LONG=`expr $NO : ".*"`
while [ "$LONG" != "5" ]
do
 LONG=`expr $NO : ".*" + 1`
 NO="0"$NO
done

Ca va trs bien lorsqu'il s'agit de convertir une string. mais
quand il faut le faire sur toute une colonne dans un gros fichier,
l faut faire appel  qqch de plus puissant si on veut pas que
ca prenne des heures...

Est-ce que qqn saurait comment faire ce truc avec awk ?

Merchi d'avance :)
@++
JC

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.



Re: Pour qqn qui maîtrise bien awk ;p

2001-03-01 Par sujet sneaky56

 "JS" == Jean-Claude Schopfer [EMAIL PROTECTED] writes:

  Je veux convertir par exemple 22 en 00022 (et 1213 en 01213).
  Pour cela je peux appliquer une mthode simpliste de ce genre :

[...]

  Est-ce que qqn saurait comment faire ce truc avec awk ?

avec GNU awk 3.03 (ce qui t'interesse c'est le "printf"):
--
bash-2.02$ cat /tmp/t
35
3
6
4590
45
3
24525
bash-2.02$ cat /tmp/t | awk '{printf("hello %0.5 ***\n", $0);}'
hello 00035 ***
hello 3 ***
hello 6 ***
hello 04590 ***
hello 00045 ***
hello 3 ***
hello 24525 ***
bash-2.02$
--


tom

-- 
in a world without fences and walls, who needs gates and windows?

--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.



Re: Pour qqn qui maîtrise bien awk ;p

2001-03-01 Par sujet Daniel Cordey

On Thu, 01 Mar 2001, Jean-Claude Schopfer wrote:
 Je veux convertir par exemple 22 en 00022 (et 1213 en 01213).
 Pour cela je peux appliquer une méthode simpliste de ce genre :

Pas forcement tres elegant ni tres performant :

NO=22
printf "%.5d" %{NO}

Si tes valeurs se trouvent dans une boucle, il est plus performant d'utiliser
awk avec un pipe plutot que la commande printf qui fait un fork/exec a chaque
parsing de la ligne. Donc :

.. | awk '{ printf("%.5d\n", $1); }'

Daniel
--
http://www-internal.alphanet.ch/linux-leman/ avant de poser
une question.