【问题标题】:How can I change command and option about 'date' command in bash?如何在 bash 中更改有关“日期”命令的命令和选项?
【发布时间】:2021-08-25 22:45:37
【问题描述】:

我想将此 bash 命令转换为 shell 脚本。

BASH

输入:

date --date="Wed Aug 25 22:37:44 +0900 2021" +"%s"

输出:

1629898664

SHELL

tmp.sh:

function time(a, b, c, d, e) { return date --date="a b c d +0900 e" +"%s" }
{print time($1, $2, $3, $4, $5}

时间线:

Wed Aug 25 22:37:44 2021

命令:

awk -f tmp.sh timeline

输出:

awk: tmp.sh:1: function cvtTime(w) { return date --date="Thu May 14 23:40:52 +0900 2020" +"%s" }
awk: tmp.sh:1:                                         ^ syntax error

时间线文件有多行怎么办?喜欢:

Wed Aug 25 22:37:44 2021 JACK
Wed Aug 26 22:37:44 2021 EMILY
Wed Aug 27 22:37:44 2021 SAM

我试过了:

#!/bin/bash
while read -r line; do
date --date="${1} ${2} ${3} ${4} +0900 ${5}" +"%s"
done

想要:

1629898664 JACK
1629985064 EMILY
1630071464 SAM

但它不起作用:(

【问题讨论】:

  • 你知道awk是做什么的吗?
  • Shell 函数没有命名参数。
  • 您似乎混淆了 shell 脚本和 awk 脚本。
  • 另外,您在time 的调用结束时缺少)
  • 我明白了。它解决了!!!

标签: bash date awk timestamp


【解决方案1】:

您似乎想要一个使用五个命令行参数调用的 shell 脚本:

  1. 工作日(三字母格式)
  2. 一个月(三个字母的格式)
  3. 月份中的某天
  4. 时间表达式 (HH:MM:SS)
  5. 一年(四位数)

(注意 1. 是多余的,它被 2.、3. 和 5 所暗示。)

因此,一个稍微小一点的 shell 脚本看起来会……。像这样:

#!/bin/bash

date --date="${1} ${2} ${3} ${4} +0900 ${5}" +"%s"

当然,这可以大大改善,例如,通过为传递的参数添加健全性检查。

如果您想将日期信息存储在文件中,以便您可以将单个 filename 参数传递给脚本(允许多个此类行),则可以使用以下变体:

#!/bin/bash

while read -a i; do
    echo $(date --date="${i[0]} ${i[1]} ${i[2]} ${i[3]} +0900 ${i[4]}" +"%s") ${i[5]}
done < ${1}

但请注意,此版本需要在每一行的日期信息之后附加一个 name 参数。

无论如何,这里不需要awk

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 2012-02-17
    • 1970-01-01
    • 2016-01-26
    • 2010-09-21
    相关资源
    最近更新 更多