使用awk在现有CSV中添加日期列

时间:2017-01-04 22:59:31

标签: csv awk

我有一个csv,格式如下

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

我想添加一个日期列,使csv看起来像这样

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

我尝试了以下awk命令,但它也在标题行中添加了日期。我是awk的新手,不知道如何工作

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

3 个答案:

答案 0 :(得分:1)

你在找这样的东西吗?

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

NR指记录的数量。喜欢行号。 这些内置变量可能对您有用:http://www.thegeekstuff.com/2010/01/8-powerful-awk-built-in-variables-fs-ofs-rs-ors-nr-nf-filename-fnr/?ref=binfind.com/web

答案 1 :(得分:1)

使用条件运算符的awk中的另一个:

$ 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可能会保持默认值,因为它不需要
  • 日期进入d var
  • 隐式打印
  • 条件运算符在第一条记录上打印date或在所有其他记录上打印d

答案 2 :(得分:0)

在这种情况下,

sed版本是另一种选择

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

sed允许内联版本(没有明确的中间文件),选项-i有时候很有用