如何获取具有特定列和特定模式的行?

如何获取具有特定列和特定模式的行?

我有一个 csv 文件,如下所示:(第二列是日期模式)

qqq.eee,2015-10-12
rrr-ttt,2015-11-23
aaapppp,2022-01-10
ddd_fff,2017-05-23
zzzbbbb,2013-09-20
nnnmmmm,2015-06-17
wwwwwww,2014-11-20
uuu-uuu,2016-12-10
ppppppp,2015-10-19
kkkkkkk,2016-12-25

我想获取第二列匹配的行,如下所示:

year between two number(for example): 2014<= year =<2016
month between two number(for example): 10<= month =<12
day between two number(for example): 20<= day =<30

然后得到输出如下:

rrr-ttt,2015-11-23
wwwwwww,2014-11-20
kkkkkkk,2016-12-25

这可以用 awk 实现吗?

答案1

awk最适合列和多条件过滤。然而,这个特殊问题也可以通过以下方法解决:grep

$ grep -E '201[4-6]-1[0-2]-(2[0-9]|30)$' ip.csv 
rrr-ttt,2015-11-23
wwwwwww,2014-11-20
kkkkkkk,2016-12-25

答案2

由于分隔符,我只是从结尾到开头进行比较

awk -F[-,] '$NF >= 20 && $NF <= 30 && $(NF-1) >= 10 && 
            $(NF-1) <= 12 && $(NF-2) >= 2014 && $(NF-2) <= 2016' yourfile
  1. NF是最后一个字段,$NF是值,$(NF-1)是最后一个字段之前的字段的值,依此类推
  2. $NF日月$(NF-1)$(NF-2)

相关内容