我正在攻读数据科学硕士学位的脚本主题,我做了下面的前一个问题:
How to filter all values in Bash's regular expression (Linux) except one?
我发现ERE并不完全是Bash。但我又卡住了。
翻译评估声明:
正则表达式必须在运行grep命令的名为www.example.com的Bash脚本中使用script.sh。该脚本应按以下方式运行:
./script.sh./headlines_words.csv
文件headline_words.csv的示例数据为:
Unnamed: 0;Unnamed: 0.1;year;country;word;frequency;count;freq_prop_headlines;word_len;freq_rank;hfreq_rank;theme
14;279;2012;India;cricketer;0;3634;0.0;9;20;20;empowerment
8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;935;female stereotypes
9887;57556;2021;all countries;hate;312;234227;0.001332041;4;436;429;crime and violence
我有三个条件:
- 年份为2010年至2011年
- freq_rank列的值大于或等于910
- 国家栏不是“所有国家”
因此,./script.sh./headlines_words.csv的正确输出必须是:
Unnamed: 0;Unnamed: 0.1;year;country;word;frequency;count;freq_prop_headlines;word_len;freq_rank;hfreq_rank;theme
8964;52224;2010;USA;witchcraft;0;1912;0.0;10;935;935;female stereotypes
对于www.example.com,我使用了grep -E(我知道它不适合,但必须使用它)和以下代码script.sh:
#!/bin/bash
grep -E '^([^;]*;){2}201[01];([^a]|a[^l]|al[^l]|all[^ ]|all [^c]|all c[^o]|all co[^u]|all cou[^n]|all coun[^t]|all count[^r]]|all countr[^i]]|all countri[^e]|all countrie[^s]);[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;9[1-9][0-9]{2,}' $1
以下部分:
^([^;]*;){2}201[01];
并且:
([^a]|a[^l]|al[^l]|all[^ ]|all [^c]|all c[^o]|all co[^u]|all cou[^n]|all coun[^t]|all count[^r]]|all countr[^i]]|all countri[^e]|all countrie[^s])
单独和一起工作。
但最后一部分:
[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;9[1-9][0-9]{2,}'
我有一个错误,因为当我在Ubuntu中运行代码./script.sh./headlines_words.csv时,终端没有给予我任何行。
非常感谢您的宝贵时间!
1条答案
按热度按时间1dkrff031#
鉴于您的项目要求使用
grep -E
,以下是grep
解决方案:RegEx Demo
然而,我必须补充的是,
awk
是更适合这项工作的工具,awk解决方案如下: