2015-11-06 67 views
0

我使用每5分钟运行一次的bash脚本收集过去20天的数据。我不知道该如何输出数据,因此我开始编写脚本。我从那以后发现了一个相当酷的js图形,它可以从CSV中读取。更改日期格式 - bash或php

唯一的问题是我的约会对象是目前的格式:

周五11月6日7时52分02秒

,为CSV我需要它是

2015年11月6日07:52:02

所以我需要将我的结果记录下来并转换为日期。

的日期猫/ grep的是:

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

我怎么能使用bash或者PHP或者周围此开关上的任何脑波?

感谢

PS - 再次启动检查使用日期+%Y%M%d”,“%H:%M:%S是可悲的是不是一种选择:(

+1

您可以发布样本数据的两行呢?另外,你的'grep'在其中有2015年,但你的日期没有。 – houtanb

+0

2015年的grep只是因为这是线上唯一的对象,对其他任何东西都可能得到误报。 周五11月6日9点09分18秒 周五11月6日9时14分46秒 是从猫/ grep的输出的2行。还是你想要没有吝啬? – user1972018

+0

我只是说在你的文本文件中有这样一个日期:'Fri Nov 6 07:52:02'没有2015,所以对2015年的吝啬不会给你任何东西。我猜这是一个复制粘贴错误。如果您使用示例行更新您的问题,我可以在下面更新我的答案以使用它。 – houtanb

回答

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 
+0

令人惊讶的是,谢谢,这工作完美 - 把我的grep的输出放到一个新的文本文件中,然后运行这个脚本并完成工作。 – user1972018

+0

@ user1972018我刚更新了一些可能适合您需求的信息。 – andlrc

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 
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