Question

Étant donné le fichier texte avec des lignes

bli foo bla
 abc
 dfg
bli foo bla
 hik
 lmn

ce qu'il sed ou la magie awk se transforme en

bli foo_01 bla
 abc
 dfg
bli foo_02 bla
 hik
 lmn

pour que chaque occurence de 'foo' est remplacé par '[numéro de occurence] foo_'.

Était-ce utile?

La solution

Ceci est une autre façon d'exprimer la réponse de radoulov

awk '/foo/ {sub(/foo/, "&_" sprintf("%02d",++c))} 1' infile

Vous devez prendre soin que vous ne correspondent pas « foobar » en cherchant « foo »:

gawk '/\<foo\>/ {sub(/\<foo\>/, "&_" sprintf("%02d",++c))} 1' 

Autres conseils

awk '!/foo/||sub(/foo/,"&_"++_)' infile

Utilisez gawk , nawk ou / usr / xpg4 / bin / awk sur Solaris .

Ceci est probablement pas ce que vous avez besoin, mais il pourrait donner quelques idées dans la bonne direction.

Administrator@snadbox3 ~
$ cd c:/tmp

Administrator@snadbox3 /cygdrive/c/tmp
$ cat <<-eof >foo.txt
> foo
>  abc
>  dfg
> foo
>  hik
>  lmn
> eof

Administrator@snadbox3 /cygdrive/c/tmp
$ awk '/^foo$/{++fooCount; print($0 "_" fooCount);} /^ /{print}' foo.txt
foo_1
 abc
 dfg
foo_2
 hik
 lmn

EDIT:

Je suis un jour de retard et un sou court, encore une fois, - (


EDIT2:

encodages de caractères est une autre chose à ... Java recherche de code source est pas nécessairement dans l'encodage par défaut du système ... il quitte codage UTF-8, pour permettre des « entités intégrées d'ordre supérieur » ;-) Beaucoup * nix services publics ne sont toujours pas conscients charset.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top