入力する:
coupon,11/2018,1
voucher,04/2018,2
出力:
coupon,11/2018,1
大きなファイルからmm / yearの11/2018
行を削除したいです。$2
答え1
$ awk -F '[,/]' '($3 == 2018 && $2 >= 11) || $3 > 2018' file
coupon,11/2018,1
入力をコンマまたはスラッシュで区切って処理します。入力の2番目のフィールドは月になり、3番目のフィールドは年になります。
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
牛に似た一種の栄養awk
方法:
サンプルファイル:
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