2009-05-19 31 views
2

mit der Klartextdatei Gegeben LinienSubstitutionen mit sed oder awk Aufzählen

bli foo bla 
abc 
dfg 
bli foo bla 
hik 
lmn 

was sed oder awk Magie verwandelt es zu

bli foo_01 bla 
abc 
dfg 
bli foo_02 bla 
hik 
lmn 

so, dass jedes Vorkommen von ‚foo‘ ersetzt durch " foo_ [Vorkommenummer] '.

+0

Michael, Weitere Erklärung Die Anforderungen und insbesondere das Eingabeformat sind erforderlich, damit jemand diese Frage beantworten kann ... Ich nehme an, Sie haben eine vereinfachte, aber repräsentative Stichprobe einer realen Datei erstellt ... Was ist das? diese Datei? eine Protokolldatei? eine mysql-Protokolldatei? Nur eine Vermutung. Prost. Keith. – corlettk

+0

eigentlich ist es eine Java-Quelldatei und die Transformation wird verwendet, um die Methode Namen einzigartig –

+0

Hallo Jungs, danke für die Lösungen, änderte ich die Frage ein wenig, Hinzufügen von etwas Lärm um die foo –

Antwort

0

Dies ist ein weiterer Weg

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

Sie sollten darauf achten, dass Sie bei der Suche nach „foo“ nicht „foobar“ entsprechen:

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

Dies ist wahrscheinlich nicht das, was Sie benötigen, aber es könnte einige Ideen in die richtige Richtung geben.

[email protected] ~ 
$ cd c:/tmp 

[email protected] /cygdrive/c/tmp 
$ cat <<-eof >foo.txt 
> foo 
> abc 
> dfg 
> foo 
> hik 
> lmn 
> eof 

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

EDIT:

Ich bin ein Tag zu spät und ein Penny kurz, wieder ;-(


EDIT2:

Zeichenkodierungen ist eine andere Sache, auf die man achten sollte ... Java s ource-Code ist nicht unbedingt in der System-Standard-Codierung ... es ist UTF-8-codiert quittiert, um alle eingebetteten "Entitäten höherer Ordnung" zuzulassen ;-) Viele * nix-Dienstprogramme sind immer noch nicht Zeichensatz-bewusst.

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

Verwenden gawk, nawk oder /usr/XPG4/bin/awk auf Solaris.

Verwandte Themen