次のCSVファイルがあります。 (2列目は日付パターンです。)
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
次のように、2番目の列で一致する行を取得したいと思います。
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
-E
拡張正規表現の使用201[4-6]
2014~2016年の範囲1[0-2]
範囲は10〜12です。2[0-9]
範囲は20〜29です。- グループ化とシフトを使用して
(2[0-9]|30)
20〜30の範囲を提供します。
- グループ化とシフトを使用して
$
行末- 追加資料:http://www.regular-expressions.info/numericranges.html