2017-01-04 4 views
2

Ich habe eine CSV mit folgendem Formathinzufügen Datumsspalte in einer vorhandenen CSV awk mit

header1,header2,header3 
data1, data2, data3 
data4, data5, data6 

ich ein Datum Spalte hinzufügen möchten, dass die csv aussehen wie dieses

header1,header2,header3, date 
data1, data2, data3, 01/04/2017 
data4, data5, data6, 01/04/2017 

machen Ich habe den folgenden awk-Befehl versucht, aber es fügt auch Datum in der Kopfzeile hinzu. Ich bin Neuling mit awk und weiß nicht, wie die

Arbeit zu bekommen
mydate=$(date) 
awk -v d="$mydate" -F"," 'BEGIN { OFS = "," } {$4=d; print}' input.csv > output.csv 

Antwort

1

Sind Sie für so etwas suchen?

awk -v date="4/1/17" -F"," 'BEGIN { OFS = "," } NR==1 {print $0 " ,date"} NR>1 {$4=date; print}' 

NR bezieht sich auf die Nummer des Datensatzes. wie die Zeilennummer. Diese in-built Variablen könnte Ihnen nützlich sein: http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/?ref=binfind.com/web

+0

Ich habe gerade Ihre Lösung versucht, es ist ziemlich genau das, was ich suche, aber anstatt eine neue Spalte bei der letzten hinzuzufügen, hängt es das Datum an die vorletzte Spalte in der CSV. –

+0

@AshutoshD Fügen Sie stattdessen einfach eine neue Spalte mit der Datumsvariablen hinzu. als was du getan hast. 'awk -v Datum =" 4/1/17 "-F", "'BEGIN {OFS =", "} NR == 1 {Druck $ 0", Datum "} NR> 1 {$ 4 = Datum; print} ''. Es sollte dann funktionieren. –

1

Eine weitere in awk mit Konditionaloperator:

$ mydate="5/1/2017" 
$ awk -v OFS=", " -v d=$mydate '$0 = $0 OFS (NR==1?"date":d)' file 
header1,header2,header3, date 
data1, data2, data3, 5/1/2017 
data4, data5, data6, 5/1/2017 
  • OFS=", ", FS kann Standard bleiben, da es nicht
  • benötigt wird
  • Datum geht in d var
  • impliziter Druck
  • bedingter Operator zum Drucken entweder date auf dem ersten Datensatz oder d auf all anderen
+1

'awk -v OFS =", "-vd = $ mydate '$ 0 = $ 0 OFS (NR == 1?" Datum ": d)'' (scheint das 'd' der Zuweisung fehlt – NeronLeVelu

+0

@NeronLeVelu Yeah es war Ich habe es vor 7 Uhr geschrieben, ich bin erstaunt, wenn es das einzige Ding fehlte ... –

+1

ich entdecke, dass Inhalt ($ 0 hier) könnte in "Muster" Bedingung Teil des Skripts UND direkt als Ergebnis (Zeile in diesem Fall) mit Ihrem Skript – NeronLeVelu

0

sed-Version ist eine Alternative in diesem Fall

mydate="6/1/2017";sed -e '1 s/$/,date/;b' -e "s/\$/,${mydate}/" YourFile 

sed einer Inline-Ausgabe (keine explizite Zwischendatei) mit Option erlaubt -i die

irgendwann praktische Möglichkeit
Verwandte Themen