我正在尝试替换 list_file1 中存储的许多模式,以匹配 data_file1 字段 2 中的类似数据,然后从 data_file1 中完全替换它。
data_file1 应匹配 list_file1 中存储的大写、小写或大小写模式的组合。
list_file1 中存储的模式将包含前导空格、尾随空格和特殊字符,下面给出一些示例。
列表文件1
AIM TO CONVERT
AIM TO CONVERT
(FAILED)
( FAILED)
\REOCCUR
数据文件1
UR4289~Deal,( FAILED) Involved~ON654-L
PR4299~Invoc,(failed)closed~BG657-C
UR4980~ AIM TO CONVERT ,JUL51~NN655-V
UR4659~aim To convert -DISSOLVE~MV694-M
预期产量
UR4289~Deal,Involved~ON654~L
PR4299~Invoc,closed~BG657~C
UR4980~,JUL51~NN655~V
UR4659~-DISSOLVE~MV694~M
awk 脚本已经准备好了
awk -F"~" 'NR==FNR{a[$0];next}{for (i in a) {if (index($2,i)) {gsub(tolower(i),"",$0)} {gsub(toupper(i),"",$0)}} print $0}' list_file1 data_file1 >> new_data1
我在这里缺少什么?
您的代码存在几个问题:
index($2,i)
区分大小写,gsub(tolower(i),"",$0)
替换整行而不是仅字段2...
你可以尝试:
awk -F"~" 'NR == FNR {a[tolower($0)] = length($0); next}
{
for(i in a) {
p = index(tolower($2), i)
if(p) $2 = substr($2, 1, p - 1) substr($2, p + a[i])
}
print
}' list_file1 data_file1