【问题标题】:Printing date within awk在 awk 内打印日期
【发布时间】:2015-09-24 15:57:47
【问题描述】:

我正在尝试在 awk 命令中打印日期。我找不到解决 gawk 的参数放在单引号内这一事实的方法,这否定了我需要 date 的执行:

gawk '/.*(ge|ga).*/  { print $1 "," $2 "," date } ' >> file.csv
gawk '/.*(ge|ga).*/  { print $1 "," $2 "," echo date } ' >> file.csv
gawk '/.*(ge|ga).*/  { print $1 "," $2 "," `date` } ' >> file.csv

在 gawk 命令中有什么办法解决这个问题?谢谢。

【问题讨论】:

  • gawk 有自己的日期函数,stftime。虽然如果你真的想使用日期然后使用system(date)date | getline
  • @User112638726 system(date) 将不起作用,因为它返回日期的退出状态。
  • @Rakholiya 它返回退出状态,但它也输出执行命令的结果。
  • @Rakholiya 而不是你应该这样做{system("date")}
  • @User112638726,可能,只是有点乱:printf "%s,%s,", $1, $2; system("date")

标签: bash date awk


【解决方案1】:

您在这里尝试做什么并不是 100% 清楚(一些输入和所需的输出会很有用),但我认为这就是您想要的:

gawk -v date="$(date)" -v OFS=, '/g[ea]/ { print $1, $2, date }'

这会根据date 命令的输出设置一个awk 变量date,并在第一个和第二个字段之后打印它。我设置了输出字段分隔符 OFS 以使您的 print 命令更整洁。

另一种选择(可能是首选)是使用 GNU awk 中可用的 strftime 函数:

gawk -v OFS=, '/g[ea]/ { print $1, $2, strftime() }'

输出的格式略有不同,但可以通过将格式字符串传递给函数来进行调整。有关详细信息,请参阅GNU awk documentation

我还根据 cmets 中提出的建议简化了您的正则表达式(谢谢)。

【讨论】:

  • 这是完美的,谢谢。为什么-v 需要两次?我只尝试了一个,但它不起作用。
  • -v 对您要设置的每个变量使用一次。在第一个代码的情况下,设置了两个变量,因此您需要为每个变量使用-v
猜你喜欢
  • 2015-01-25
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多