awk 中的当前日期

Eng*_*ng7 9 awk text-processing gawk

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

假设我们有以下文件:

boo,foo,2016-08-30
foo,boo,2016-07-31
Run Code Online (Sandbox Code Playgroud)

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

即下面的脚本:

awk -F, '{if($3>"2015-08-23"){print $0}}'
Run Code Online (Sandbox Code Playgroud)

2015-08-23当前日期将在哪里更改。

kdh*_*dhp 22

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

awk -F, -v date="$(date +%Y-%m-%d)" '$3>date'
Run Code Online (Sandbox Code Playgroud)

或在awk脚本中

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

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

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

  • 主要是@Archemar 习惯。如果“日期”的格式没有空格,则不需要。 (2认同)

Fel*_*xJN 6

使用getline解决方法:

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


sch*_*ily 6

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

$ awk 'BEGIN{srand(); print srand()}'
1440536144
Run Code Online (Sandbox Code Playgroud)

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

  • 啊! 刚刚找到了我依稀记得的线程:https://groups.google.com/forum/#!topic/comp.unix.shell/ONhLIUW4CgU 所以看来它在 OpenBSD 上不起作用。 (7认同)
  • 请注意,它适用于许多“awk”实现,并且曾经是获取当前 Unix 纪元时间的最便携的方法(更不用说在“awk”中)。但不是所有的。POSIX 所要求的只是种子基于_一天中的时间_(在我看来,这是一个相当无用的要求),而不是具体的 UNIX 纪元时间,它允许实现使用不太可预测的东西,并且比每秒更频繁地更改。现在我不记得哪个 awk 实现不起作用。 (5认同)