将epoch后的秒数转换为文件中特定行的完整日期

  • 本文关键字:日期 epoch 转换 文件 bash date
  • 更新时间 :
  • 英文 :


我有以下文件:

foo,1460844122
bar,abcd
bla,efjhi
foo,1464834121
baz,jklmn

我想逐行阅读,只有当"foo"作为第一个单词出现时,才能将第二个单词(自epoch以来的秒数)转换为完整日期并输出foo:full-date

如何使用Bash来完成此任务?

这个应该能做到:

while IFS=, read -r k v; do
    if [[ $k == "foo" ]]; then
        printf '%s:%sn' "$k" "$(date --date="@$v")"
    fi
done < /path/to/your/file

如果已安装perl:

perl -plE 's/^(foo),(d+)/"$1:" . localtime($2)/e' < file

对于您的数据,它会打印

foo:Sun Apr 17 00:02:02 2016
bar,abcd
bla,efjhi
foo:Thu Jun  2 04:22:01 2016
baz,jklmn

在awk:中

$ awk -F, '$1 == "foo" {printf "%s:%sn", $1, strftime("%c", $2)}' infile
foo:Sat, Apr 16, 2016  6:02:02 PM
foo:Wed, Jun  1, 2016 10:22:01 PM

strftime函数的第一个参数控制日期/时间输出格式;%c是您所在地区的"适当"日期和时间表示。如果我们想要更可排序的东西,我们可以使用ISO 8601日期格式和24小时时间表示,用T:分隔

$ awk -F, '$1 == "foo" {printf "%s:%sn", $1, strftime("%FT%T", $2)}' infile
foo:2016-04-16T18:02:02
foo:2016-06-01T22:22:01

最新更新