linux - 在 awk 命令 shell 中使用日期

标签 linux shell awk

我有一个与 shell 中 awk 命令相关的问题。我们有一个包含以下值的输入 csv 文件:

Control_Time;Report_Name
2020-08-10;Report A
2020-06-10;Report B
2020-07-01;Report C

我的目标是检查此文件中的所有行,并仅过滤(复制)日期大于上个月第一天的行。因此,我创建了一个名为 previous_month 的变量,如下所示:

previous_month=$(date -d "`date +%Y%m01` -1 month" +%Y-%m-%d)

这个变量工作正常,但我无法在 awk 语句中使用它,我想用它来将数据过滤到输出文件中。

我尝试了以下语句只是为了打印 previous_month 但它不起作用。

awk -v previous_month="$(date -d "`date +%Y%m01` -1 month" +%Y-%m-%d)" '{print previous_month}'

但是,echo previous_month 工作正常,它给我的值是 2020-07-01。有什么方法可以使用这个自定义变量吗? 谢谢大家的建议!

最佳答案

您已经很接近了,可以请您尝试关注吗?

awk -v pre_date=$(date -d "`date +%Y%m01` -1 month" +%Y-%m-%d) '
BEGIN{
  FS=OFS=";"
}
$1==pre_date
'  Input_file

OP 代码尝试的改进:

  • 我们可以创建一个 awk 变量,在其中我们可以提及 date shell 命令本身,因此采用 OP 的 date 命令并将其放入pre_date awk 变量。
  • 由于 OP 希望将上个月的日期与 Input_file 相匹配,因此首先我们需要根据 OP 的示例 Input_file 将分隔符设置为 ;
  • 然后我们需要将 Input_file 的 $1 第一个字段与 awk 变量进行比较,并检查条件,如果两者相同,则不会执行任何操作,因此默认情况下会打印当前行.

关于linux - 在 awk 命令 shell 中使用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63446254/

相关文章:

.net - 运行 Mono 的最佳 Linux 发行版

linux - 为 mysql 输入转义 echo 中的引号

linux - 将 Zend Framework 1.12 升级到 2.3

linux - 如何在 bash 中声明二维数组

Bash:根据一些分隔符拆分字符串并将每个分隔符存储在一个变量中

bash - 如何通过管道传输到 awk 脚本中

bash - 使用 grep 过滤线流并在其前面加上检测到的模式

c - SDL_Mixer 无法处理部分代码

bash - 针对 BASH 脚本中的 -n 选项进行测试始终返回 true

Bash 将分隔文件中的所有整数减一