awk 中的当前日期

awk 中的当前日期

中是否有一个常量变量awk存储今天的日期?如果没有,有没有办法可以存储今天的日期以供日常使用?

假设我们有以下文件:

boo,foo,2016-08-30
foo,boo,2016-07-31

$3我需要将文件中的日期与今天的日期进行比较,无论它是什么。

即下面的脚本

awk -F, '{if($3>"2015-08-23"){print $0}}'

其中2015-08-23将由当前日期更改。

答案1

标准中没有内置函数awk来获取日期,但可以轻松地将日期分配给变量。

awk -F, -v date="$(date +%Y-%m-%d)" '$3>date'

或者在awk脚本中

BEGIN {
    str = "date +%Y-%m-%d";
    str | getline date;
    close(str);
}
$3>date

gawk, 有内置的time functions,并且strftime可以使用。

gawk -F, 'BEGIN{date=strftime("%Y-%m-%d")}$3>date'

答案2

使用getline解决方法:

awk -F, ' BEGIN { "date +%Y-%m-%d" | getline a } { if ( $3>a ) { print 0 }} ' file

答案3

如果您想获取当前的 time_t,可以通过调用 srand() 然后调用 t = srand() 来完成。

$ awk 'BEGIN{srand(); print srand()}'
1440536144

这是因为 posix 要求如果在没有 arg 的情况下调用随机函数,则使用当前时间进行初始化并返回先前的种子。

答案4

您可以通过分配一个变量来做到这一点:

cat /path/to/file | awk -v date="$(date +'%Y-%m-%d')" -F, '{if($3>date){print $0}}'

相关内容