【问题标题】:awk convert number to date format to select line bigger than specific mmyyawk 将数字转换为日期格式以选择大于特定 mmyy 的行
【发布时间】:2020-06-02 00:18:51
【问题描述】:

输入

test,1120,1
test,1219,2

预期输出

test,1120,1

目标:例如尝试打印$2mmyy 格式)大于1020 的行。

我尝试了以下方法:

awk -F, '{ if ( $2 > 1020 ) { print $0 }}' file 这不会给出预期的输出,因为它仍然是数字等等。1219 大于 1020

【问题讨论】:

  • 因此,我们鼓励用户添加他们为解决自己的问题所做的努力,请在您的问题中添加相同的内容,然后让我们知道。
  • @RavinderSingh13 完成。

标签: regex unix awk sed grep


【解决方案1】:

假设第二个字段总是包含 4 位数字,如何:

awk -F, 'substr($2, 3, 2) substr($2, 1, 2) > 2010' input

请注意,我将bigger 解释为later,意思是0921bigger 而不是1020。如果我的假设不正确,请告诉我。

【讨论】:

    【解决方案2】:

    编辑: 因为 OP 提到现在如果日期需要的输入少于提供的输入,在这种情况下,可以尝试关注。

    awk -v val="1020" '
    BEGIN{
      FS=OFS=","
      user_year=substr(val,3)
      user_month=substr(val,1,2)
    }
    {
      year=substr($2,3)
      month=substr($2,1,2)
      if(year==user_year){
       if(month<user_month){
         print
       }
      }
      else if(year<user_year){
         print
      }
    }
    ' Input_file
    


    请您尝试以下操作。我在这里创建了一个名为val 的变量,它具有用户需要与Input_file 的所有行进行比较的值。在这种情况下,它被设置为1020

    awk -v val="1020" '
    BEGIN{
      FS=OFS=","
      user_year=substr(val,3)
      user_month=substr(val,1,2)
    }
    {
      year=substr($2,3)
      month=substr($2,1,2)
      if(year==user_year){
        if(month>user_month){
          print
        }
      }
      if(year>user_year){
          print
      }
    }
    ' Input_file
    

    【讨论】:

      猜你喜欢
      • 2015-06-05
      • 1970-01-01
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-10
      • 1970-01-01
      相关资源
      最近更新 更多