我有一个CSV文件,其中记录编号,元素符号和元素名称被写入。我想提取那些第二列(即元素符号)does not contain the letters a,e,i,o,u,A,E,I,O,U.的行,所以我编写了一个脚本来实现相同的功能,但是它给了我所有的行。
这是我的剧本:

awk -F',' '$2~/[^aeiouAEIOU]/' sample.txt

sample.txt文件:
102,No,Nobelium
103,Lr,Lawrencium
104,Rf,Rutherfordium
105,Db,Dubnium
106,Sg,Seaborgium
107,Bh,Bohrium
108,Hs,Hassium
109,Mt,Meitnerium
110,Ds,Darmstadtium
111,Rg,Roentgenium
112,Cn,Copernicium
113,Nh,Nihonium
114,Fl,Flerovium
115,Mc,Moscovium
116,Lv,Livermorium
117,Ts,Tennessine
118,Og,Oganesson

最佳答案

试用

$ awk -F',' '$2!~/[aeiouAEIOU]/' sample.txt
103,Lr,Lawrencium
104,Rf,Rutherfordium
105,Db,Dubnium
106,Sg,Seaborgium
107,Bh,Bohrium
108,Hs,Hassium
109,Mt,Meitnerium
110,Ds,Darmstadtium
111,Rg,Roentgenium
112,Cn,Copernicium
113,Nh,Nihonium
114,Fl,Flerovium
115,Mc,Moscovium
116,Lv,Livermorium
117,Ts,Tennessine

!~在匹配时返回false
$2~/[^aeiouAEIOU]/表示如果第二个字段包含任何非元音字符,则返回true。。因此,No将匹配,因为N是非元音字符
这可以通过整个字符串匹配来更正:$2~/^[^aeiouAEIOU]+$/
tolower($2) !~ /[aeiou]/也可以用来代替$2 !~ /[aeiouAEIOU]/

10-06 02:12