输入:
coupon,11/2018,1
voucher,04/2018,2
输出:
coupon,11/2018,1
我想从大文件中删除毫米/年所在的11/2018
行$2
答案1
$ awk -F '[,/]' '($3 == 2018 && $2 >= 11) || $3 > 2018' file
coupon,11/2018,1
将输入视为由逗号或斜杠分隔,输入的第二个字段将是月份,第三个字段将是年份。
awk
如果年份是 2018 年并且月份大于或等于 11,或者年份大于 2018 年,则程序将打印输入。
执行此操作sed
需要使用正则表达式确定日期是在 2018 年 11 月之前还是之后。这一点很重要。
匹配任何大于 2018 的 4 位整数的正则表达式:
[3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019
^^^^^^^^^^^^^ ^^^^^^^^^^^^^^ ^^^^^^^^^^^^
3000-9999 2100-2999 2020-2099
所以sed
命令变成
$ sed -n -E '\#(1[12]/2018)|([01][0-9]/([3-9][0-9]{3}|2[1-9][0-9]{2}|20[2-9][0-9]|2019))#p' file
coupon,11/2018,1
答案2
GNUawk
方法:
样本文件:
coupon,11/2018,1
voucher,04/2018,2
a,31/2016,b
aa,02/2019,bb
awk -v d=$(date +%s -d"11/01/2018") \
-F',' '{ split($2, a, "/") }mktime(sprintf("%d %d 01 00 00 00", a[2], a[1])) >= d' file
输出:
coupon,11/2018,1
aa,02/2019,bb