【问题标题】:Using date in awk command shell在 awk 命令 shell 中使用日期
【发布时间】:2020-08-17 07:16:49
【问题描述】:

我有一个与 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 的值。有什么方法可以使用这个自定义变量吗? 谢谢大家的建议!

【问题讨论】:

  • 如果您向我们展示您需要帮助的代码,即您want to use for filtering data into the output file 的代码,那么我们可以帮助您调试和改进该代码。

标签: linux shell awk


【解决方案1】:

你已经很接近了,你能试试关注吗?

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 的第一个字段$1awk 变量并检查条件,如果两者相同,则没有提到任何操作,因此默认情况下会打印当前行。

【讨论】:

    【解决方案2】:

    您的命令运行良好。 awk 只是在标准输入或文件给出的行上工作。或者您正在输入的内容。

    尝试以下方法:

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

    这将打印一次日期,因为您通过标准输入提供了一行。

    或者

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

    这将打印文件中每一行的日期。

    或者

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

    (现在输入一些内容并按回车键)

    这将在您每次按 Enter 时打印日期。

    【讨论】:

      【解决方案3】:

      感谢两位的回答。这真的很有帮助!我没有意识到,我需要使用输入文件。所以,它工作得很好,但我必须添加输入文件。

      最终查询如下:

      awk -v previous_month="$(date -d "`date +%Y%m01` -1 month" +%Y-%m-%d)" '{if ($1 > previous_month) print $0}' inputFile > outputFile;
      

      它可以帮助别人。

      【讨论】:

      • '{if ($1 > previous_month) print $0}' 应该只是 '$1 > previous_month',没有别的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多