简体   繁体   English

使用正则表达式将列与awk匹配

[英]matching a column with awk using regex

I have a CSV file in which record number, element symbol and element name is written. 我有一个CSV文件,其中记录了记录号,元素符号和元素名称。 I want to extract those lines in which second column (ie element symbol) does not contain the letters a,e,i,o,u,A,E,I,O,U. 我想提取其中第二列(即元素符号) does not contain the letters a,e,i,o,u,A,E,I,O,U. So I wrote a script to achieve the same but it is giving me all the lines. 所以我写了一个脚本来达到相同的目的,但是它给了我所有的思路。

This is my script: 这是我的脚本:

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

The sample.txt file: 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

Try 尝试

$ 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
  • !~ to return false on a match !~在比赛中返回假
  • $2~/[^aeiouAEIOU]/ means return true if second field contains any non-vowel character.. so, No will match because N is non-vowel character $2~/[^aeiouAEIOU]/表示如果第二个字段包含任何非元音字符,则返回true。.因此, No将匹配,因为N是非元音字符
    • this can be corrected by whole string match: $2~/^[^aeiouAEIOU]+$/ 这可以通过整个字符串匹配来纠正: $2~/^[^aeiouAEIOU]+$/
  • tolower($2) !~ /[aeiou]/ can also be used instead of $2 !~ /[aeiouAEIOU]/ 也可以使用tolower($2) !~ /[aeiou]/代替$2 !~ /[aeiouAEIOU]/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM