管道到UNIX日期功能

时间:2013-08-16 11:50:18

标签: unix date

要将日期格式化为时间戳,我会使用例如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)}'

1 个答案:

答案 0 :(得分:8)

这就是:

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
     

在最后获得TIMESTAMP}}'

这可以做到:

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

测试

$ cat a | grep 2 | xargs -i date -d "{}" "+%s"  # grep here is just a silly example
1336299120
1336299180