You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

脚本解析

  1. 读取f1内容:NR==FNR块先读取f1,将原路径存入数组a,替换扩展名后的路径存入数组b
  2. 填充id1字段:匹配空的id1=行,用计数器cnt_id1对应数组a的内容填充
  3. 填充id2字段:匹配空的id2=行,用计数器cnt_id2对应数组b的内容填充
  4. 保留原内容:最后的1是AWK的简写,代表对所有未匹配的行直接输出原内容

内容的提问来源于stack exchange,提问作者justaguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:12:15