【问题标题】:Regex issue for match a column value匹配列值的正则表达式问题
【发布时间】:2021-05-15 00:33:21
【问题描述】:

我编写了一个脚本来从与 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|' -v n=4 -v 'm="[a-z]+@gmail.com"' 'NR!=1 && $n !~ "^" m "$" { printf "%s:%s:%s\n", 文件名, FNR, $0 > "/dev/stderr" 计数++ } END {print count}' /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" -- 输出中不应出现此行,因为它与电子邮件模式 "[a-z]+@gmail.com" 匹配。模式是从以下文件中提取的

模式提取的输入文件file_col_metadata

FILE_ID~col_POS~COL_START_POS~COL_END_POS~数据类型~delimited_ind~col_format~columnlength 5~4~~~char~Y~"[a-z]+@gmail.com"~100

【问题讨论】:

  • 我有点困惑,您使用'|' 的字段分隔符显示,但您的输入是逗号分隔的。假定col_pos 可以是分配给awk 变量n 的字段编号或正则表达式,但随后您继续将其用作$n,就好像它是一个shell 变量一样。此外,使用!~ "^" m "$" 并不清楚您要匹配的内容。请看你是否可以澄清。`
  • 你不想匹配的那条线被匹配了吗?
  • 感谢您更改了分隔符。我没注意到

标签: linux awk


【解决方案1】:

如果您将awk -F'|' ... 替换为awk -F',' ...,它将起作用。

【讨论】:

    猜你喜欢
    • 2011-07-17
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多