如何匹配两个文本文件内容,完成单词查找替换并添加连字符拆分格式
解决方案
awk完全支持双文件比对替换的需求,无需额外编写复杂程序,以下是可直接使用的实现方案:
实现思路
- 先解析
source1.txt,构建「原始单词」和「带连字符拆分版本」的映射字典 - 遍历
source2.txt,将对应位置的原始单词替换为映射字典中的拆分版本
可直接执行的awk命令
awk ' # 处理第一个文件source1.txt,构建映射表 NR == FNR { if(match($0, /<span class="INFLX" >([^<]+)<\/span><span class="HYPHENATION" >([^<]+)<\/span>/, m)) { hyphen_map[m[1]] = m[2] } next } # 处理第二个文件source2.txt,执行替换 { for(word in hyphen_map) { sub("\\[UK\\] " word, "[UK] " hyphen_map[word]) } print } ' source1.txt source2.txt > output.txt
说明
NR == FNR是awk处理多文件的常用判断逻辑:NR是全局行号,FNR是当前文件的行号,两者相等时代表正在处理第一个输入文件source1.txt- 处理
source1.txt时仅做映射关系提取,不输出内容 - 处理
source2.txt时会遍历所有已存储的映射关系完成替换,最终输出的内容直接重定向到output.txt即可 - 如果需要直接修改
source2.txt而不是生成新文件,使用GNU awk可添加-i inplace参数,效果和sed -i一致 - sed本身虽然也能实现双文件替换,但逻辑繁琐可读性差,这类需要暂存映射关系的场景更适合用awk实现
内容的提问来源于stack exchange,提问作者Alvin Tang
相关产品推荐
相关产品推荐

