我需要实现一个正则表达式,该表达式给出了以下示例数据集,允许我选择那些在2000年1月之前出生的学生记录,其课程成绩高于1.7。例如,下面示例中的命令的结果应该是第二条记录
id, date of birth, grade, explusion, serious misdemeanor
123,2005-01-01,5.36,1,1
582,1999-10-12,8.51,0,1
9274,2001-25-12,9.65,0,0我尝试了以下方法,但在执行后没有得到任何结果。
grep -E "^*,1[0-9]{3}(-[0-9]{2}){2}*[10],(1\.[7-9][1-9])]"知道怎么回事吗?
发布于 2022-04-13 14:30:38
使用grep,您可以将整个模式写成
grep -E '^[0-9]+,1[0-9]{3}-[0-9]{2}-0?1,(1\.(7[1-9][0-9]*|[89][0-9]*)|[2-9](\.[0-9]+)?|10(\.0+)?),[0-9]+,[0-9]+$' file^开始[0-9]+,匹配id的1+数字和,1[0-9]{3}-匹配1位数,3位数字和-[0-9]{2}-0?1,匹配2位数字-,1月份匹配01或1(集团的替代品1\.(7[1-9][0-9]*|[89][0-9]*)匹配1.71-1.79或1.8或1.9,后面都是可选数字|或[2-9](\.[0-9]+)?匹配2-9可选地后面跟着.和1+数字。|或10(\.0+)?匹配10,其次是.和0(假设10是最高等级)),关闭组并匹配逗号[0-9]+,[0-9]+匹配最后两个列值,假设1+位数$末端发布于 2022-04-13 14:12:34
在你的判断中,我找不到一月的部分,而且分数看上去也不对。这里有一个简单的例子:
grep -E '1...-..-01,([2-9]\.)|(1\.[7-9][1-9])'解释:
1...-..-01 year=1xxx, month=01
[2-9]\.| grade 2-9 or
1.[7-9][1-9] grade 1.7[1-9]假设grade < 10 (可以很容易更改)。
awk稍微简单一点:
awk -F[,-] '$2<2000 && $4=="01" && $5 > 1.7'https://stackoverflow.com/questions/71858725
复制相似问题