如何在 bash 中更改有关 'date' 命令的命令和选项?

How can I change command and option about 'date' command in bash?

我想将此 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(, , , , }

时间线:

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="    +0900 " +"%s"
done

想要:

1629898664 JACK
1629985064 EMILY
1630071464 SAM

但它不起作用:(

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

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

(注意1.是多余的,由2.、3.、5.隐含)

因此,一个有点小的 shell 脚本看起来……像这样:

#!/bin/bash

date --date="    +0900 " +"%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 < 

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

无论如何,这里不需要awk