使用awk将f1内容填充至f2指定字段并修改扩展名的问题
AWK实现文件字段填充并保留原文件内容
需求说明
将文件f1中的每行路径填充到文件f2的id1=和id2=字段中:
id1字段直接填入原路径id2字段将路径扩展名从.txt替换为.csv- 必须保留
f2中所有非id1/id2的原始内容
输入文件示例
f1
/path/to/file1.txt /path/to/file2.txt /path/to/file3.txt
f2
#... ... id1= id1= id1= id2= id2= id2= ...
期望输出
#... ... ... id1=/path/to/file1.txt id1=/path/to/file2.txt id1=/path/to/file3.txt id2=/path/to/file1.csv id2=/path/to/file2.csv id2=/path/to/file3.csv ...
现有脚本问题
当前脚本仅输出id1/id2相关行,丢失了f2中的其他内容:
awk 'NR==FNR{a[NR]=$0; next} {print "id1=" a[FNR]; print "id2=" gensub(/\.txt$/, ".csv", "g", a[FNR])}' f1 f2
修正后的AWK脚本
awk 'NR==FNR { a[NR] = $0 # 提前替换扩展名并存储,避免重复计算 b[NR] = $0 sub(/\.txt$/, ".csv", b[NR]) next } # 匹配空id1字段并填充 /^id1=$/ { print "id1=" a[++cnt_id1] next } # 匹配空id2字段并填充 /^id2=$/ { print "id2=" b[++cnt_id2] next } # 其他行直接输出 1' f1 f2
脚本解析
- 读取f1内容:
NR==FNR块先读取f1,将原路径存入数组a,替换扩展名后的路径存入数组b - 填充id1字段:匹配空的
id1=行,用计数器cnt_id1对应数组a的内容填充 - 填充id2字段:匹配空的
id2=行,用计数器cnt_id2对应数组b的内容填充 - 保留原内容:最后的
1是AWK的简写,代表对所有未匹配的行直接输出原内容
内容的提问来源于stack exchange,提问作者justaguy
相关产品推荐
相关产品推荐

