Domanda

Dato il file di testo con le linee

bli foo bla
 abc
 dfg
bli foo bla
 hik
 lmn

quello sed o awk magia trasforma in

bli foo_01 bla
 abc
 dfg
bli foo_02 bla
 hik
 lmn

in modo che ogni occorrenza di 'foo' è sostituito da 'foo_ [numero occurence]'.

È stato utile?

Soluzione

Questo è un altro modo per esprimere la risposta di radoulov

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

Si dovrebbe fare attenzione a non corrispondono "foobar", mentre cerca di "foo":

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

Altri suggerimenti

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

Usa gawk , nawk o / usr / XPG4 / bin / awk su Solaris .

Questo probabilmente non è quello che avete bisogno, ma potrebbe dare alcune idee nella direzione giusta.

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

Modifica

Sono un giorno di ritardo e un centesimo breve, ancora una volta, - (


EDIT2:

codifiche di carattere è un'altra cosa da ricerca di ... Java codice sorgente non è necessariamente nella codifica dei sistemi di default ... è smettere di codifica UTF-8, per consentire qualsiasi "entità di ordine superiore" incorporati ;-) Molti * nix utilità ancora non sono charset-aware.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top