4

要将日期格式化为时间戳,我会使用 eg date -d "2012-05-06 12:12" "+%s"。但是,如果我有一个每行有日期的文件,我该怎么做:

cat file.txt | date "+%s" # does not work

我可以执行以下操作:

cat file.txt | while read line; do `date -d "$line" "+%s"`; done;

但这太丑了……

将日期时间转换为时间戳(格式为 YYYY-MM-DD HH:MM:SS)的其他解决方案也是可以接受的。

编辑:我的现实生活中的例子有点复杂,让我详细说明一下:

`some command that produces complex lines` | grep only-speicif-lines | awk '{ print $5 | (I WANT TO PASS THE DATE HERE TO GET TIMESTAMP IN THE END)}'
4

1 回答 1

9

这使得它:

while read mydate
do
  date -d "$mydate" "+%s"
done < file

请注意,您的解决方案

cat file.txt | while read line; do `date -d "$line" "+%s"`; done;

不是每行读取文件行的​​方法。你需要

while read line; do `date -d "$line" "+%s"`; done < file.txt
                                                  ^^^^^^^^^^

测试

$ cat a
2012-05-06 12:12
2012-05-06 12:13
$ while read mydate; do date -d "$mydate" "+%s"; done < a
1336299120
1336299180

更新

从您的评论中:

编辑:我的现实生活中的例子有点复杂,让我详细说明一下:

`some command that produces complex lines` | grep only-speicif-lines | awk '{ print $5 | (I WANT TO PASS THE DATE HERE

最后获取时间戳)}'

这可以使它:

xargs -i date -d "{}" "+%s" 

测试

$ cat a | grep 2 | xargs -i date -d "{}" "+%s"  # grep here is just a silly example
1336299120
1336299180
于 2013-08-16T11:52:13.333 回答