更改日期格式 - bash或php

时间:2015-11-06 09:07:22

标签: bash date timestamp

我使用每5分钟运行一次的bash脚本收集过去20天的数据。我开始编写脚本时不知道如何输出数据。之后我发现了一个从CSV中读取的相当酷的js图。

唯一问题是我的日期目前格式为:

Fri Nov 6 07:52:02

对于CSV我需要它

2015-11-06 07:52:02

所以我需要把我的结果用于日期并转换它。

日期的cat / grep是:

cat speeds.txt | grep 2015 | awk '{print $1" "$2" "$3" "$4}'

关于如何使用bash或php切换它的任何脑波?

由于

PS - 使用日期再次开始检查+%Y%m%d" "%H:%M:%S遗憾地不是一种选择:(

3 个答案:

答案 0 :(得分:0)

您可以在bash脚本中使用日期格式到纪元时间格式。

date -d 'Fri Nov 6 07:52:02' +%s;

1446776522

date -d @1446776522 +"%Y-%m-%d %T "

2015-11-06 07:52:02  

答案 1 :(得分:0)

假设您的所有行都包含日期:

$ cat file        
Fri Nov 6 07:52:02
...
$ awk 'BEGIN {
  months["Jan"] = 1;
  months["Feb"] = 2;
  months["Mar"] = 3;
  months["Apr"] = 4;
  months["May"] = 5;
  months["Jun"] = 6;
  months["Jul"] = 7;
  months["Aug"] = 8;
  months["Sep"] = 9;
  months["Oct"] = 10;
  months["Nov"] = 11;
  months["Dec"] = 12;
}
{
  month = months[$2];
  printf("%s-%02d-%02d %s\n", 2015, month, $3, $4);
}' file > out
$ cat out
2015-11-06 07:52:02
...

如果你只需要修改一些行,你可以稍微调整一下awk脚本,例如。匹配包含2015的每一行:

...
# Match every line containing 2015
/2015/ {
  month = months[$2];
  printf("%s-%02d-%02d %s\n", 2015, month, $3, $4);
  # Use next to prevent this the other print to happen for these lines 
  #   Like 'continue' in while iterations
  next;
};
# This '1' will print all other lines as well:
#   Same as writing { print $0 }
1

答案 2 :(得分:0)

由于您没有提供输入,我假设您有一个名为speeds.txt的文件包含:

Fri Oct 31 07:52:02  3
Fri Nov 1 08:12:04  4
Fri Nov 2 07:43:22  5

(上面的345只是为了表明您可以在行中包含其他数据,但不是必需的。)

使用此命令:

cat speeds.txt | cut -d ' ' -f2,3,4 | while read line ; do date -d"$line" "+2015-%m-%d %H:%M:%S" ; done; 

你得到了输出:

2015-10-31 07:52:02
2015-11-01 08:12:04
2015-11-02 07:43:22