2016-06-13 2 views
1

ich die folgende Codezeile haben:Überschreiben Eingabedatei awk mit

awk -F, '{printf "%09d,%d\n" ,$1,$2}' $newDir/$processNew 

und es tut, was ich will, sondern die aktuelle Datei zu überschreiben, druckt es aus dem Bildschirm.

Was muss ich ändern, um die aktuelle Eingabedatei, die $ processNew ist, zu überschreiben?

Danke.

Antwort

1

Wenn Sie die Quelldatei außer Kraft setzen möchten, müssen Sie eine temporäre Datei Datei verwenden:

awk -F, '{printf "%09d,%d\n" ,$1,$2}' $newDir/$processNew > tmp && mv tmp $newDir/$processNew 
1

Mit GNU awk, können Sie

gawk -i inplace -options 'script' file ... 

oder

gawk -i inplace -v INPLACE_SUFFIX=.bak -options 'script' file ... 
tun

Ref: https://www.gnu.org/software/gawk/manual/html_node/Extension-Sample-Inplace.html

+0

I bin neugierig; Wie funktioniert diese Erweiterung? Es ist offensichtlich kein Teil von Posix Awk. Mein awk (GNU Awk 4.0.1) auf ubuntu 14.04 weiß nichts von einem -i-Schalter. – tink

+0

Ich weiß nicht, welche Version sie hinzugefügt hat. Möglicherweise 4.3. Also upgrade, damit sie funktionieren –

+0

4.1.3 ...? jedenfalls, habe 4.1.1 von PPA, und das hat es. Was mich verwirrt hatte, war das -i ... Ich hatte nicht erwartet, dass ich diese Erweiterung laden würde, sondern analog zu der in sed. :) – tink