我有一个与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/

    10-16 10:26