将纪元以来的秒数转换为文件中特定行的完整日期

时间:2016-04-16 22:21:37

标签: bash date

我有以下文件:

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

我想逐行阅读,只有" foo"显示为第一个单词,将第二个单词(自纪元以来的秒数)转换为完整日期并输出 foo:full-date

如何使用Bash完成此任务?

3 个答案:

答案 0 :(得分:1)

这个应该可以解决问题:

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

答案 1 :(得分:1)

如果您已安装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

答案 2 :(得分:1)

在awk中:

$ awk -F, '$1 == "foo" {printf "%s:%s\n", $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:%s\n", $1, strftime("%FT%T", $2)}' infile
foo:2016-04-16T18:02:02
foo:2016-06-01T22:22:01