首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于OR逻辑CSV文件的BASH-Grep结果

基于OR逻辑CSV文件的BASH-Grep结果
EN

Stack Overflow用户
提问于 2022-04-16 21:37:03
回答 2查看 91关注 0票数 0

我有这个CSV文件,基本上是来自运动员的记录,和他们的个人信息/奖牌。

我只需要得到一个egrep (扩展正则表达式)如下(我几乎什么都有):

  • ID必须有9位数字,第三位必须是0或3。
  • 生日年份必须低于2000年,只有10月(10)个月。
  • 运动员的身高必须等于或大于1,7 (我在这里挣扎)。第二个小数点不可能是0。
  • 必须至少赢得一枚奖牌(无论多少枚,至少一枚),但不可能是铜牌。--

到目前为止,我已经拥有了一切,但身高的事情需要最后一刻的改变才能永远是真实的(因为我不知道怎么说那可以是1米和7-9米之间,但同时,接受2米和0-9之间)。奖章,我不知道如何告诉系统,如果金牌大于0,银可以是0,而反过来.

代码语言:javascript
运行
复制
\d\d[0|3]\d\d\d\d\d\d,.*[1]\d\d\d[-][1][0][-]\d\d,[1|2].[7-9][^0],\d\d,.*[0-9],[1-9],[0].*

它会返回给我如下:

代码语言:javascript
运行
复制
353946547,Arthur van Doren,BEL,male,1994-10-01,1.78,74,hockey,0,1,0,
820456660,Giulia Emmolo,ITA,female,1991-10-16,1.71,67,aquatics,0,1,0,
230772998,Kelly Brazier,NZL,female,1989-10-28,1.71,70,rugby sevens,0,1,0,
713017392,Pavlo Tymoshchenko,UKR,male,1986-10-13,1.92,78,modern pentathlon,0,1,0,

但它应该返回这个(我基本上改变了1从银到金的位置为演示):

代码语言:javascript
运行
复制
353946547,Arthur van Doren,BEL,male,1994-10-01,1.78,74,hockey,0,1,0,
820456660,Giulia Emmolo,ITA,female,1991-10-16,1.71,67,aquatics,0,1,0,
230772998,Kelly Brazier,NZL,female,1989-10-28,1.71,70,rugby sevens,0,1,0,
713017392,Pavlo Tymoshchenko,UKR,male,1986-10-13,1.92,78,modern pentathlon,0,1,0,
110156979,Lauritz Schoof,GER,male,1990-10-07,1.95,98,rowing,1,0,0,
730877927,Matthew Centrowitz,USA,male,1989-10-18,1.76,65,athletics,1,0,0,

该文件存储在这里:

https://github.com/jpiedehierroa/files/blob/main/athletesv2.txt

您可以使用此站点更快地调试代码和文件:

https://regex101.com/

非常感谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-16 22:49:12

样本输入:

代码语言:javascript
运行
复制
$ cat medals.dat
353946547,Arthur van Doren,BEL,male,1994-10-01,1.78,74,hockey,0,1,0,
820456660,Giulia Emmolo,ITA,female,1991-10-16,1.71,67,aquatics,0,1,0,
230772998,Kelly Brazier,NZL,female,1989-10-28,1.71,70,rugby sevens,0,1,0,
713017392,Pavlo Tymoshchenko,UKR,male,1986-10-13,1.92,78,modern pentathlon,0,1,0,
110156979,Lauritz Schoof,GER,male,1990-10-07,1.95,98,rowing,1,0,0,
730877927,Matthew Centrowitz,USA,male,1989-10-18,1.76,65,athletics,1,0,0,

999946547,Arthur van Doren,BEL,male,1994-10-01,1.78,74,hockey,0,1,0,
999956660,Giulia Emmolo,ITA,female,1991-10-16,1.71,67,aquatics,0,1,0,
999972998,Kelly Brazier,NZL,female,1989-10-28,1.71,70,rugby sevens,0,1,0,
713017392,Pavlo Tymoshchenko,UKR,male,1986-08-13,1.92,78,modern pentathlon,0,1,0,
110156979,Lauritz Schoof,GER,male,1990-10-07,1.65,98,rowing,1,0,0,
730877927,Matthew Centrowitz,USA,male,1989-10-18,1.76,65,athletics,0,0,3,

注意:前6行来自OP的预期输出;最后6行是相同行的修改副本;最后6行不应显示在输出中

egrep/regex的一个想法是:

代码语言:javascript
运行
复制
$ egrep '^[0-9]{2}[03][0-9]{6},([^,]*,){3}1...-10[^,]*,(1\.[7-9]|2\.[0-9])[0-9]*,([^,]*,){2}([^0]|[^,]*,[^0])' medals.dat
353946547,Arthur van Doren,BEL,male,1994-10-01,1.78,74,hockey,0,1,0,
820456660,Giulia Emmolo,ITA,female,1991-10-16,1.71,67,aquatics,0,1,0,
230772998,Kelly Brazier,NZL,female,1989-10-28,1.71,70,rugby sevens,0,1,0,
713017392,Pavlo Tymoshchenko,UKR,male,1986-10-13,1.92,78,modern pentathlon,0,1,0,
110156979,Lauritz Schoof,GER,male,1990-10-07,1.95,98,rowing,1,0,0,
730877927,Matthew Centrowitz,USA,male,1989-10-18,1.76,65,athletics,1,0,0,

备注:

我的版本的[0-9]

  • tallest [23]\.[0-9])

  • assumes似乎不支持\d,因此使用egrep来生活的时间(到目前为止)是272万,所以我们应该对2\.[0-9]很好(即不需要egrep,没有一个领域的兴趣领域具有领先的空白

)。

票数 1
EN

Stack Overflow用户

发布于 2022-04-16 21:53:46

我想这个大王能做你想要的:

代码语言:javascript
运行
复制
\d\d[0|3]\d\d\d\d\d\d,.*[1]\d\d\d[-][1][0][-]\d\d,(1\.[7-9]|2\.[0-9])[^0],\d\d,.*(1,1|0,1|1,0),[0-9],$
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71897644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档