Warm tip: This article is reproduced from serverfault.com, please click
awk

其他-AWK正则表达式获取月份日期

(其他 - AWK regex to get month date)

发布于 2020-11-29 17:27:05

我有以下字符串,希望通过第二列和第三列进行过滤。

23/10/2020,15/09/2020,8067363,suv,0,0,0,0,0,0,0,0,0,0
23/10/2020,22/10/2020,08067375,suv,0,0,1,0,0,0,0,0,0,0
23/10/2020,09/09/2020,8067387,suv,0,0,0,0,0,0,0,0,0,0
23/10/2020,21/10/2020,08067399,suv,0,0,0,0,0,0,0,0,0,0
23/10/2020,09/09/2020,8067417,suv,0,0,0,0,0,0,0,0,0,0

第二列是日期,这是我只希望在10月开始(24 /行10 /20)。另一方面,我想按第三列进行过滤,该列已经完成并且可以单独使用(经过测试)。我的问题是我想将所有这些放在一起,但是由于语法和正则表达式的原因,我会不断收到很多错误。

我想构造的是这样的:

awk ' {if ((/(\/d{1,2})\/(\/d{1,2})\/(\/d{1,2})/ {$2 = 10}) && ($3 ~ /^08/) {print}}' test.csv

{$2 > 10}正则表达式应该在哪里获得第二组(月)并等于10。第二部分是从08开始的第三列,效果很好。

预期的输出是那些第二列是十月,第三列以“ 08”开头的行。

例如:

27/01/2020,24/10/2020,08077081,suv,0,0,0,0,0,2,0,0,0,0
27/05/2020,15/10/2020,08077082,suv,0,0,0,0,0,2,0,0,0,0
27/08/2020,12/10/2020,08077083,suv,0,0,0,0,0,2,0,0,0,0

你能帮我弄清楚这行吗?

谢谢

Questioner
js352
Viewed
11
Ed Morton 2020-11-30 02:28:47
$ awk -F'[/,]' '($5 == 10) && ($7 ~ /^08/)' file
23/10/2020,22/10/2020,08067375,suv,0,0,1,0,0,0,0,0,0,0
23/10/2020,21/10/2020,08067399,suv,0,0,0,0,0,0,0,0,0,0