基于匹配键替换文件对应条目内容的技术实现需求
解决方案:用awk实现字段匹配替换
可以使用awk工具完成这个需求,它能精准处理带特殊字符的文本字段匹配与替换,完整保留引号内的所有内容。
实现脚本
BEGIN { # 预读取File2,构建Key到目标内容的映射 while ((getline line < "File2") > 0) { if (match(line, /^[0-9]+\s+("[^"]+")\s+("[^"]+")\s+\|$/, arr)) { key_map[arr[1]] = arr[2] } } close("File2") } # 处理File1的每一行 { if (match($0, /^([0-9]+)\s+("[^"]+")\s+("[^"]+")\s+\|$/, arr)) { num = arr[1] key = arr[2] content = arr[3] # 匹配到Key则替换内容 if (key in key_map) { content = key_map[key] } # 按原格式输出 printf("%s %s %s |\n", num, key, content) } else { # 不符合格式的行直接保留输出 print $0 } }
运行方法
- 将上述脚本保存为
replace_content.awk - 在终端执行命令:
awk -f replace_content.awk File1
工作原理
- 预加载映射表:在
BEGIN块中读取File2,通过正则匹配提取每个条目的Key(第二个带引号字段)和对应内容(第三个带引号字段),存储到关联数组key_map中。 - 处理目标文件:遍历
File1的每一行,同样用正则提取数字、Key、原内容;如果Key存在于key_map中,就替换内容,最后按原格式输出;未匹配的行直接保留原样。 - 特殊字符兼容:通过匹配完整的带引号字段,确保引号内的空格、特殊符号(如
#@!、单引号)完全保留。
内容的提问来源于stack exchange,提问作者skwierczyk1
相关产品推荐
相关产品推荐

