2017-05-05 3 views
2

Nehmen Sie eine Textdatei Datei an, die mehrere Textzeichenfolgenzeilen enthält.Fügen Sie fortlaufende Nummer innerhalb jeder Zeile hinzu

> cat file 
foo bar baz 
bar quux foo 
foo baz quux 

Ich mag eine fortlaufende Nummer (mit führenden Ziffern, gefolgt von einem Unterstrich) hinzuzufügen, um jedes dritte Spalte Wort.

> cat file | sought_command 
foo bar 001_baz 
bar quux 002_foo 
foo baz 003_quux 

Ich glaube, dass dies einfach über awk erreicht werden kann (awk '{printf("%03d ...), kann aber mit dem richtigen Code nicht kommen.

+1

Die zweite Zeile von Eingabe und Ausgabe stimmt nicht überein – 123

+0

@ 123 Sie haben Recht. Mein Fehler. Ich habe das obige Beispiel korrigiert. –

Antwort

3

Sie können sprintf verwenden und es $ 3 zuweisen, indem Sie die Zeilennummer als Ziffer verwenden.

awk '$3=sprintf("%03d_%s",NR,$3)' file 

foo bar 001_baz 
bar baz 002_qux 
foo baz 003_quux 
+1

Kurz und auf den Punkt. Vielen Dank! –

+1

'^ 1' aber ich wünschte, du hättest mit' {$ 3 = sprintf ("% 03d_% s", NR, $ 3)} 1 statt nur $ 3 = sprintf ("% 03d_% s", NR, $ 3)) Ich habe mich also nicht gefragt, in welchem ​​Zustand Sie versuchen wollten, wahr oder falsch zu sein, und nachdem Sie sich überzeugt hatten, haben Sie sich darauf verlassen, dass es immer wahr ist, wenn Sie überlegen, ob es unerwartete Szenarien gibt, in denen $ 3 landet Numerisch Null oder Null und damit die Bedingung falsch sein ... –

+0

@EdMorton Ich dachte, aber es wird immer wahr sein, da NR immer gesetzt wird, so wird immer ausgegeben werden (und wird True zurückgeben), selbst wenn $ 3 war null/nicht gesetzt, da es eine Zeichenfolge ist. – 123

Verwandte Themen