使用awk根据键文件内容从固定宽度值文件中提取匹配记录
awk固定宽度文件按键匹配提取记录解决方案
原脚本错误说明
- 字段索引混淆:
FIELDWIDTHS配置项的每个数值对应第N个字段的宽度,你需要的14位长度的键是第2个字段(对应变量$2),而非第14个字段($14) - 配置生效时机错误:
FIELDWIDTHS必须在行解析前设置才会生效,在NR!=FNR块中修改对第二个文件的首行无效 - 数组赋值语法错误:
data["0"$14]仅为表达式,没有完成键存储,需要显式赋值如data[$2]=1 - 匹配逻辑与传参错误:原脚本条件写反(不匹配才打印),且仅传入1个文件,需要按「键文件在前、值文件在后」的顺序传入两个文件
正确实现脚本
针对你提供的样例文件,适配脚本如下:
awk 'BEGIN { # 按固定宽度定义字段,可根据你的真实业务宽度调整 FIELDWIDTHS = "4 14 12 20" } # 处理第一个文件(键文件),把匹配键存入数组 NR == FNR { # 若需要加前缀0匹配,可改为 data["0"$2] = 1 data[$2] = 1 next } # 处理第二个文件(值文件),匹配到键则打印整行 $2 in data { print $0 } ' key.txt value.txt
输出结果
执行后将得到你期望的输出:
1 39485063845911 RANDOMTEXT RANDOMNUMBERS 1 39485063845912 RANDOMTEXT RANDOMNUMBERS
内容的提问来源于stack exchange,提问作者Icaro Americo
相关产品推荐
相关产品推荐

