Pregunta

Dado el archivo de texto plano con líneas

bli foo bla
 abc
 dfg
bli foo bla
 hik
 lmn

lo sed o la magia awk transforma a

bli foo_01 bla
 abc
 dfg
bli foo_02 bla
 hik
 lmn

de modo que cada aparición de 'foo' se sustituye por '[número de ocurrencia] loquesea _'.

¿Fue útil?

Solución

Esta es otra manera de expresar la respuesta de radoulov

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

Usted debe tener cuidado de que no hace coincidir "foobar", mientras que en busca de "foo":

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

Otros consejos

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

Con gawk , nawk o / usr / xpg4 / bin / awk en Solaris .

Esto probablemente no es lo que necesita, pero podría darle algunas ideas en la dirección correcta.

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:

Soy un día de retraso y un penique corta, de nuevo, - (


Edit2:

Las codificaciones de caracteres es otra cosa que ... puesto de observación para el código fuente de Java no está necesariamente en la codificación predeterminada sistemas ... es dejar de codificación UTF-8, para permitir cualquier "entidades de orden superior" incrustados ;-) Muchos * nix utilidades aún no se charset-conscientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top