我的csv文件由2列组成,名称和日期为24小时格式
Name, log_date
John, 11/29/2017 23:00
我想添加2小时的日志日期来更改日期和时间,如下所示
John, 11/30/2017 01:00
我尝试通过以下命令添加它但没有成功
awk - F 'NR>1{$4+=(2/24);}1' OFS="," IN.csv > OUT.csv
我得到以下输出
2017.08
在日志日期列的值
中所以请帮助
答案 0 :(得分:2)
您需要一种具有日期时间算术的语言。 Perl例如:
perl -MTime::Piece -F'/,\s*/' -slane '
$datetime = Time::Piece->strptime($F[1], $fmt);
$F[1] = ($datetime + 7200)->strftime($fmt);
print join ", ", @F
' -- -fmt="%m/%d/%Y %H:%M" <<END
John, 11/29/2017 11:00
END
John, 11/29/2017 13:00
鉴于您的输入,无法指示时间是晚上11点。你怎么知道的?
答案 1 :(得分:1)
是python中的oneliner。这真的不是一个可用的代码,但我相信你可以了解使用单行代码。这种单线程可以更简单。
python -c "s=r'John, 11/29/2017 13:00';
print(s.replace(s.split(\" \")[-1].split(\":\")[0],str(int(s.split(\" \")[-1].split(\":\")[0])+2)));";
输出
John, 11/29/2017 15:00
然而,这不会像日期23 + 2 = 25那样滚动,应该假设是1:00
答案 2 :(得分:0)
awk -F',' '{if(NR>1){printf("%s, ", $1);system("date -d \"+2 hours " $2 "\" +\"%m/%d/%Y %H:%M\"")}else{print $0}}' IN.csv > OUT.csv
答案 3 :(得分:0)
所有您正在寻找的内容都记录在案here。
使用空格作为字段分隔符:
{
split($2,D,"/")
split($3,H,":")
# format for mktime is "YYYY MM DD HH MM SS [DST]"
d = D[3] " " D[1] " " D[2]" " H[1] " " H[2] " 00"
t=mktime(d)
t = t + 7200 # add two hours
$2 = strftime("%m/%d/%Y",t)
$3 = strftime("%H:%M",t)
}1