linux - 如何在linux中获取大于/小于提供日期的数据

标签 linux unix

我有 sample.txt 文件,文件中的数据如下所示:

LINE 1|2017-02-19|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-02-06|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-03-06|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-02-07|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-03-25|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-02-06|LINE 3|LINE 4| LINE 5 | LINE 6

现在我想从 sample.txt 文件中获取数据

2017-02-19
2017-02-06
2017-03-06
2017-02-07    
2017-03-25
2017-02-06

            > 2017-02-19

所以我的输出应该是这样的

LINE 1|2017-03-06|LINE 3|LINE 4| LINE 5 | LINE 6
LINE 1|2017-03-25|LINE 3|LINE 4| LINE 5 | LINE 6

最佳答案

使用 GNU awkdate

  • 设置field separator FS|
  • date -d[DATE] +[OUTPUT_FORMAT]... 会将字段二 ($2) 格式化为自 unix epoch 以来的秒数 (%s) 并将其通过管道传递给变量 d
  • Awk 将测试 d 是否小于 2017-02-19 其自纪元以来的秒数为 1487480400如果为 true 将打印整个记录 $0

代码

awk 'BEGIN{FS="|";} { "date -d"$2" +%s" | getline d;} d < 1487480400 { print $0; }'

注意:您可以通过将 print $0; 更改为 print $1;print $1,$2; 来仅打印特定字段code>,甚至 print $1"anythingYouWantHereQuoted"$2;


查找自 Unix 纪元给定日期以来的秒数

例如,您可以从命令行使用 date -d2017-02-19 +%s 找到给定日期的 Unix 纪元以来的秒数。

关于linux - 如何在linux中获取大于/小于提供日期的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43713668/

相关文章:

linux - 将 html 和 css 文件复制到 dist,同时保持文件夹结构

linux - 函数中的命令不能像在终端中手动输入那样工作

linux - 如何获取连接到我的路由器的设备详细信息?

Linux bash 定时器

linux - 收到 'ambiguous redirect' 错误

linux - 我如何使用一组指令的输出来创建一个新变量?

bash - 将多个参数传递给 UNIX shell 脚本

linux - 多行变量中导出的含义是什么

c - 显示文件类型的函数

powershell - 根据参数将文件从Unix复制到Windows