用AWK增加date几天和几个月

用AWK增加date

大家好,我需要你的帮助。 我有一个文件“test.csv”,我想增加“6个月”和“10天”的date,以便我得到以下输出:

test.csv:

"000001","TEST1","2013-05-07 16:02:07","ACTIVE" "000003","TEST3","2013-05-09 16:02:07","ACTIVE" "000004","TEST4","2013-05-10 16:02:07","ACTIVE" "000005","TEST5","2013-05-11 12:02:07","ACTIVE" 

输出test-increment-10days.csv:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-05-17 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-05-19 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-05-20 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-05-21 12:02:07" 

输出test-increment-6months.csv:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-11-07 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-11-09 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-11-10 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-11-11 12:02:07" 

我用这个命令试过了:

awk -F“\” ,\“ ”'{{cmd =“date \”+%Y-%m-%d%T \“-d \”“$ 3”+10 days \“”; cmd | getline数据; closures(CMD); 打印$ 0“,\”“datum”\“”}}'test.csv> test-increment-10days.csv

awk -F“\” ,\“ ”'{{cmd =“date \”+%Y-%m-%d%T \“-d \”“$ 3”+6 months \“”; cmd | getline数据; closures(CMD); 打印$ 0“,\”“datum”\“”}}'test.csv> test-increment-6months.csv

但我得到这个错误的输出。

testing递增,10days.csv:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-05-08 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-05-10 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-05-11 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-05-12 12:02:07" 

testing递增,6months.csv:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-06-07 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-06-09 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-06-10 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-06-11 12:02:07" 

“test-increment-10days.csv”中的date只增加一天,在“test-increment-6months.csv”中只增加一个月。 希望有人能帮助。

尝试这个:

 awk -F"\",\"" '{cmd="date -d \"$(date -d \""$3"\")+10days\" \"+%Y-%m-%d %T\"";cmd | getline datum; close(cmd); print $0 ",\""datum"\""}' test.csv > test-increment-10days.csv 

基础日期命令的一个例子是:

 date -d "$(date -d '2013-05-07 16:02:07')+10days" "+%Y-%m-%d %T" 

有两个date命令。 内部date创建一个具有指定值的日期。 然后加10天。 外部日期创建一个新的递增日期并对其进行格式化。

这是使用GNU awk的一种方法。 你首先需要把你的需求转换成几秒钟。 或者,写一些awk来做到这一点。 这应该让你启动并运行:

 awk -f script.awk test.csv 

script.awk内容:

 BEGIN { FPAT = "([^,]+)|(\"[^\"]+\")" OFS="," } { string = "\"(....)-(..)-(..) (..):(..):(..)\"" format = "\\1 \\2 \\3 \\4 \\5 \\6" date_spec = gensub(string, format, "", $3) timestamp = mktime(date_spec) # 10 days = 864000 seconds # 6 months = 15638400 seconds # uncomment one of the following: # new_stamp = "\"" strftime("%F %T", timestamp + 864000) "\"" # new_stamp = "\"" strftime("%F %T", timestamp + 15638400) "\"" print $0, new_stamp } 

结果:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-05-17 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-05-19 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-05-20 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-05-21 12:02:07" 

结果:

 "000001","TEST1","2013-05-07 16:02:07","ACTIVE","2013-11-04 16:02:07" "000003","TEST3","2013-05-09 16:02:07","ACTIVE","2013-11-06 16:02:07" "000004","TEST4","2013-05-10 16:02:07","ACTIVE","2013-11-07 16:02:07" "000005","TEST5","2013-05-11 12:02:07","ACTIVE","2013-11-08 12:02:07"