2016-07-15 3 views
2

Ich versuche, Header-Dateien zu einer Datei in-Place mit gawk hinzufügen. Die Eingabe file ist tabulatorgetrennt, also habe ich das zum Befehl hinzugefügt. Wenn ich gawk -i inplace mit nur awk ersetze, läuft der Befehl, aber die file wird nicht aktualisiert. Ich weiß, awk hat keine In-Place-Bearbeitung wie sed, aber kann gawk verwendet werden oder gibt es einen besseren Weg?Tabulator-getrennte Datei in-Place mit Gawk aktualisieren

gawk -i inplace ' 
BEGIN {FS = OFS = "\t" 
} 
NR == 1 { 
$1= "Chr" 
$2= "Start" 
$3= "End" 
$4= "Gene" 
} 
1' file 

Datei (input-Datei zu aktualisieren)

chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

gewünschter Ausgang

Chr  Start  End   Gene 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

I wurde mit dem SO Q & A awk save modifications in place als Führung war aber nicht in der Lage um mein Problem zu lösen.

Antwort

1
awk 'BEGIN {print "Chr\tStart\tEnd\tGene"}1' file > newFile && mv newFile file 

Ausgabe

Chr  Start End  Gene 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 
chr7 121738788 121738930 AASS 

Wie Sie in das Hinzufügen einer Kopfzeile sind vor allem daran interessiert scheint, drucken nur, dass, bevor etwas passiert (über den BEGIN Block). Die 1 ist eine "wahre" Anweisung, so dass alle Zeilen der Eingabe (standardmäßig) gedruckt werden. Sie können es mit der langen Hand {print $0} ersetzen, wenn Sie Code möchten, den nicht awk-Gurus verstehen.

Auch mit einer -i inplace Option macht das Programm dasselbe wie awk 'code' file > newFile && mv newFile file hinter den Kulissen, so gibt es keine "Einsparungen" in der Verarbeitung zum Hinzufügen eines Headers zu einer Datei. Die Datei muss in jedem Fall neu geschrieben werden.

IHTH

+0

Vielen Dank für Ihre Hilfe und Erklärungen, ich schätze sie wirklich :) – Chris

1

Es wäre effizienter, einfach tun:

cat - file <<<$'Chr\tStart\tEnd\tGene' > newfile && mv newfile file 

ohne awk Beteiligung an allen.

Verwandte Themen