【发布时间】: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 "$"并不清楚您要匹配的内容。请看你是否可以澄清。` -
你不想匹配的那条线被匹配了吗?
-
感谢您更改了分隔符。我没注意到