我有以下文件:
foo,1460844122
bar,abcd
bla,efjhi
foo,1464834121
baz,jklmn
我想逐行阅读,只有" foo"显示为第一个单词,将第二个单词(自纪元以来的秒数)转换为完整日期并输出 foo:full-date 。
如何使用Bash完成此任务?
答案 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