使用awk跨文件替换字符串并生成新文件时遇语法错误求助
解决方案
你的awk命令存在语法和逻辑错误,以下是正确的实现方式:
方法一(高效版)
先把main文件的内容全部读入内存,再遍历ref文件的每个条目,替换后生成对应文件:
awk 'NR==FNR { main = main $0 "\n"; next } { fname = $0 tmp = main gsub(/xxx/, fname, tmp) print tmp > fname }' main ref
方法二(逐行处理main)
先把ref的所有条目存入数组,再逐行处理main文件,对每个条目完成替换并写入对应文件:
awk 'NR==FNR { items[++n]=$0; next } { for (i=1; i<=n; i++) { fname=items[i] line=$0 gsub(/xxx/, fname, line) print line > fname } }' ref main
错误说明
- 语法错误:
-v fname=ref($0)不符合awk变量定义规则,-v用于传递shell外部变量,不能直接在参数中写awk的内部语法。 - 逻辑错误:原命令没有读取
ref文件的条目,无法实现遍历每个变量生成对应文件的需求。
运行上述正确命令后,会生成item1、item2、item3三个文件,内容与你期望的一致。
内容的提问来源于stack exchange,提问作者EverLearner
相关产品推荐
相关产品推荐

