【问题标题】:Using awk how to fetch the date day wise?使用 awk 如何明智地获取日期?
【发布时间】:2021-03-15 16:39:43
【问题描述】:

我不知道如何按天获取日期,即如果日期类似于 03/12/2020,我如何才能在 awk 中仅获取“03”? 让我们使用虚拟数据制作一个场景,文件记录如下所示

Cust_id;  orderDate; orderAmt
101; 20/09/2020; 8000
102; 08/08/2020; 6000
103; 03/11/2020; 12000
104; 21-06-2020; 1200
105; 04-07-2020; 1300 

可能的输出:

103; 12000
105; 1300

如何打印第一次购买商品的客户的详细信息 使用 AWK 的任何一个月中的一周?如何在此处按天获取日期字段。还 请注意,如果记录像 104 'id',如果日期格式发生更改,即 21-06-2020 从默认 21/06/2020 起如何处理?

我已经尝试过堆栈溢出,但没有遇到这个日期情况问题,并且还尝试了下面的链接对我没有更多帮助?

https://www.unix.com/shell-programming-and-scripting/138974-using-awk-print-date.html

【问题讨论】:

    标签: bash shell unix awk


    【解决方案1】:

    这是你想要做的吗?

    $ cat tst.awk
    BEGIN { FS="[[:space:]]*;[[:space:]]*"; OFS="; " }
    NR == 1 { next }
    { gsub("-","/",$2) }
    $2 == tgt { print $1, $3 }
    

    $ awk -v tgt='03/11/2020' -f tst.awk file
    103; 12000
    
    $ awk -v tgt='04/07/2020' -f tst.awk file
    105; 1300
    

    【讨论】:

    • 先生,请添加 cmets,这样我就可以理解我是 awk 中的菜鸟而不是高级。
    • 这 4 行没有什么先进的,它是非常基础的 awk。通常,您需要尝试自己创建脚本,然后我们将帮助您。您没有在您的问题中提供尝试,但现在您可以在手册页中查找我的答案中使用的构造,或者只是谷歌一些 awk 脚本,从而比我用勺子喂你该脚本的每一行所做的事情要了解更多.同样,这是非常、非常 基本的 awk,所以它不应该花你很长时间。如果您确实有这样做后的具体问题,那么当然可以随时提问。
    • 鉴于您在之前的问题中编写和发布的 awk 代码(例如 stackoverflow.com/q/62219181/1745001stackoverflow.com/q/62339294/1745001),您应该可以毫无困难地理解我更简单的脚本。
    • 先生,谢谢您的建议,下次我会记住的,我没有得到您在“FS”中发布的“空格”部分,因为我没有使用过那个这就是我问你的原因。
    • 不客气。它记录在手册页和许多其他地方,因为它不是特定于 awk 的 - 始终检查手册页和/或标准和/或先快速“谷歌”,然后再询问某人浪费时间描述那里已经有充分记录的事情.
    【解决方案2】:

    在此处再添加一个变体,请您尝试使用所示示例进行编写和测试。在awk 的变量dat 中以DDMMYYYY 格式传递日期,其中包含任何破折号或斜杠,其中将与第二个字段的子字符串进行比较。

    awk -v dat="04072020" '
    BEGIN{
      FS="[[:space:]]*;[[:space:]]*"
      OFS="; "
    }
    dat == (substr($2,1,2) substr($2,4,2) substr($2,7,4)){
      print $1,$3
    }
    ' Input_file
    

    说明:为上述添加详细说明。

    awk -v dat="04072020" '              ##Starting awk program from here and creating dat with date of DDMMYYYY format.
    BEGIN{                               ##Starting BEGIN section of this program from here.
      FS="[[:space:]]*;[[:space:]]*"     ##Setting field separator spaces(one or more occurrences) semi colon and again one or more occurrences of spaces.
      OFS="; "                           ##Setting output field separator as semi colon space here.
    }
    dat == (substr($2,1,2) substr($2,4,2) substr($2,7,4)){ 
                                         ##Checking condition if dat is equal to substring of (1st,2nd)chars (4th,5th) and (7th,8th) chars collective sub string.
      print $1,$3                        ##Printing 1st and 3rd fields here.
    }
    ' Input_file                         ##Mentioning Input_file name here. 
    

    【讨论】:

      【解决方案3】:

      另一种解决方案:

      我假设 OP 指的是每月前 7 天内的购买。 从给定的输入日期开始,第一部分是日期,第二部分是月份。 可以应用多个分隔符,第二个可以与

      $ cat akshay.txt
      Cust_id;  orderDate; orderAmt
      101; 20/09/2020; 8000
      102; 08/08/2020; 6000
      103; 03/11/2020; 12000
      104; 21-06-2020; 1200
      105; 04-07-2020; 1300
      $ awk -F"[-;/ ]+" ' $2<7 ' akshay.txt
      103; 03/11/2020; 12000
      105; 04-07-2020; 1300
      $
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-25
        • 2022-08-19
        • 2015-04-02
        • 2020-09-19
        • 1970-01-01
        • 2015-02-11
        相关资源
        最近更新 更多