Pergunta

Dado o arquivo de texto simples com linhas

bli foo bla
 abc
 dfg
bli foo bla
 hik
 lmn

o sed ou awk transforma mágicas para

bli foo_01 bla
 abc
 dfg
bli foo_02 bla
 hik
 lmn

para que cada ocorrência de 'foo' é substituída por 'foo_ [número de ocorrência]'.

Foi útil?

Solução

Esta é uma outra maneira de expressar a resposta de radoulov

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

Você deve tomar cuidado para que você não corresponder "foobar", enquanto procura "foo":

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

Outras dicas

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

Use gawk , nawk ou / usr / XPG4 / bin / awk em Solaris .

Este provavelmente não é o que você precisa, mas pode dar algumas idéias na direção certa.

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:

Eu sou um dia de atraso e um centavo curta, mais uma vez, - (


EDIT2:

Codificação de caracteres é outra coisa a procura de ... Java de código fonte não é necessariamente na codificação de sistemas padrão ... é parar de codificação UTF-8, para permitir quaisquer embutidos "entidades de ordem superior" ;-) Muitos * nix utilidades ainda não estão charset-aware.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top