【问题标题】:Change date format - bash or php更改日期格式 - bash 或 php
【发布时间】:2015-11-06 09:07:22
【问题描述】:

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

唯一的问题是我的日期目前采用以下格式:

11 月 6 日星期五 07:52:02

对于 CSV,我需要它

2015-11-06 07:52:02

所以我需要对我的结果进行 grep-ing 查找并转换它。

日期的 cat/grep 是:

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

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

谢谢

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

【问题讨论】:

  • 可以发两行样本数据吗?此外,您的 grep 包含 2015 年,但您的日期没有。
  • 2015 年的 grep 只是因为它是线上唯一的对象,其他任何东西的 grep 都可能得到误报。 Fri Nov 6 09:09:18 Fri Nov 6 09:14:46 是 cat/grep 的 2 行输出。或者你想要没有 grepping?
  • 我只是在你的文本文件中的日期中说:Fri Nov 6 07:52:02 没有 2015,所以 2015 的 grepping 不会给你任何东西。我猜这是一个复制粘贴错误。如果您使用示例行更新您的问题,我可以在下面更新我的答案以使用它。

标签: bash date timestamp


【解决方案1】:

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

$ 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

【讨论】:

  • 太棒了,谢谢,这工作得很好——把我的 grep 的输出放到一个新的文本文件中,然后在上面运行这个脚本并完成工作。
  • @user1972018 我刚刚更新了一些可能适合您需求的信息。
【解决方案2】:

您可以在 bash 脚本中使用日期格式来标记时间格式。

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

1446776522

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

2015-11-06 07:52:02  

【讨论】:

    【解决方案3】:

    由于您没有提供输入,我假设您有一个名为 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
    

    【讨论】:

      猜你喜欢
      • 2012-08-07
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 2011-06-05
      • 2016-11-22
      相关资源
      最近更新 更多