我使用每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遗憾地不是一种选择:(
答案 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
(上面的3
,4
和5
只是为了表明您可以在行中包含其他数据,但不是必需的。)
使用此命令:
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