Bash 使用awk如何获取日期?

Bash 使用awk如何获取日期?,bash,shell,unix,awk,Bash,Shell,Unix,Awk,我被困在了如何获取日期的问题上,即如果日期是2020年12月3日,我如何才能在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 如何打

我被困在了如何获取日期的问题上,即如果日期是2020年12月3日,我如何才能在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的任何月份中的一周?如何在此处使用day wise获取日期字段。而且 注意,如果记录如104“id”,如果日期格式发生变化,即21-06-2020 从2020年6月21日起,如何应对

我尝试了堆栈溢出,但没有得到这个日期情况的问题,也尝试了下面的链接不能帮助我更多


这就是你想做的吗

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

这就是你想做的吗

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

在这里再添加一个变体,请您尝试以下使用所示样本编写和测试的变体。在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. 

在这里再添加一个变体,请您尝试以下使用所示样本编写和测试的变体。在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. 
另一个解决方案:

我假设OP指的是一个月前7天内的购买。 从给定的输入日期看,第一部分是天,第二部分是月。 可以应用多个分隔符,第二个分隔符可以与<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
$
另一个解决方案:

我假设OP指的是一个月前7天内的购买。 从给定的输入日期看,第一部分是天,第二部分是月。 可以应用多个分隔符,第二个分隔符可以与<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
$

先生,请添加评论,以便我能理解我在awk中是noobie而不是advanced。这四行中没有任何高级内容,这是非常基本的awk。通常,您需要自己尝试创建脚本,然后我们会帮助您完成。您没有在问题中提供尝试,但现在您可以在手册页中查找我的答案中使用的结构,或者只搜索一些awk脚本,从而了解更多内容,而不是我用勺子告诉您该脚本的每一行内容。同样,这是非常非常基本的awk,所以不会花你太长时间。如果你做了这些之后确实有具体的问题,那么当然可以问。考虑到你在之前的问题中编写和发布的awk代码,例如,你应该完全可以理解我更简单的脚本。先生,谢谢你的建议,下次我会记住,我没有得到你在FS中发布的空格部分,因为我没用过那个,所以我问你,不客气。它被记录在手册页和许多其他地方,因为它不是特定于awk的-始终检查手册页和/或标准和/或在要求某人浪费时间描述已经有很好的文件记录的事情之前先快速谷歌。先生,请添加评论,以便我能理解我在awk中不是高级。没有什么在这四条线中,它是非常基本的awk。通常,您需要自己尝试创建脚本,然后我们会帮助您完成。您没有在问题中提供尝试,但现在您可以在手册页中查找我的答案中使用的结构,或者只搜索一些awk脚本,从而了解更多内容,而不是我用勺子告诉您该脚本的每一行内容。同样,这是非常非常基本的awk,所以不会花你太长时间。如果你做了这些之后确实有具体的问题,那么当然可以问。考虑到你在之前的问题中编写和发布的awk代码,例如,你应该完全可以理解我更简单的脚本。先生,谢谢你的建议,下次我会记住,我没有得到你在FS中发布的空格部分,因为我没用过那个,所以我问你,不客气。它被记录在手册页和许多其他地方,因为它不是特定于awk的-始终检查手册页和/或标准和/或在要求某人浪费时间描述已经在那里有很好记录的事情之前先快速谷歌。