首页 > 解决方案 > 匹配列值的正则表达式问题

问题描述

我编写了一个脚本来从与 col 元数据文件中定义的模式不匹配的文件中提取列值。

但它没有返回正确的输出。谁能在这里指出这个问题?我试图用双引号匹配字符串。引号也需要匹配。

代码:

          `awk -F'|' -v n="$col_pos" -v m="$col_patt" 'NR!=1 && $n !~ "^" m "$" {
                     printf "%s:%s:%s\n", FILENAME, FNR, $0 > "/dev/stderr"
                     count++
                   }  
                   END {print count}' $input_file`

运行输出:- ++ awk '-F|' -vn=4 -v 'm="[az]+@gmail.com"' 'NR!=1 && $n !~ "^" m "$" { printf "%s:%s:%s\n ", 文件名, FNR, $0 > "/dev/stderr" count++ } END {打印计数}' /test/data/infa_shared/dev/SrcFiles/datawarehouse/poc/BNX.csv

10,22,"00AF","abc@gmail.com",197,10,1/1/2020 12:06:10.260 PM,"BNX","Hard b","50","Us",1 ,"25" - 输出中不应出现此行,因为它与电子邮件模式 "[az]+@gmail.com" 匹配。模式是从以下文件中提取的

模式提取的输入文件 file_col_metadata

FILE_ID~col_POS~COL_START_POS~COL_END_POS~datatype~delimited_ind~col_format~columnlength 5~4~~~char~Y~"[az]+@gmail.com"~100

标签: linuxawk

解决方案


如果你awk -F'|' ...用它替换awk -F',' ...它将工作。


推荐阅读