UNIX环境下合并两文件且优先取file1值的实现方案咨询
UNIX环境下双文件按优先级合并实现方案
直接用awk即可完成需求,无需额外安装工具,适配所有标准UNIX/Linux环境:
实现命令
awk ' NR==FNR { # 先加载file2的id与tmpValue映射关系 if($1 ~ /^[0-9]/) tmp[$1]=$2 next } { # 处理file1数据 if($1 == "id") { # 输出自定义表头 print "ID\tName\tFinalValue" next } # 按优先级取值:srcValue非空优先用,否则取file2的对应tmpValue final = $3 != "" ? $3 : tmp[$1] print $1"\t"$2"\t"final } ' file2 file1
注意事项
- 命令中文件顺序必须是
file2在前file1在后,保证先加载映射关系再做匹配 - 逻辑完全匹配需求规则,最终仅保留file1中存在的id条目,和样例输出范围一致
- 默认输出用制表符分隔,可根据需求自行修改分隔符配置
样例运行结果
用你提供的测试数据执行命令后,输出和预期完全一致:
ID Name FinalValue 1 a s123 2 b s456 3 c TVb
内容的提问来源于stack exchange,提问作者Laks
相关产品推荐
相关产品推荐

