如何用awk匹配双文件内容并输出含重复项的对应关联值
解决方案
你之前的写法存在两个核心问题:
- 读取顺序颠倒:先读取file1存键,再用file2匹配输出,输出的是file2的条目顺序,自然无法保留file1的重复条目和原有顺序
- 没有存储file2的映射值:只存了file1的键作为过滤条件,无法把file2的数值追加到file1条目后
正确的awk实现代码如下:
awk 'FNR==NR {map[$1]=$2; next} {print $0, map[$1]}' file2.txt file1.txt
代码逻辑说明
FNR==NR判定仅作用于第一个输入文件file2:将file2第一列作为键、第二列的数值作为值,存入map映射数组next跳过后续逻辑,避免处理file2时执行后面的输出逻辑- 处理第二个输入文件file1时,逐行读取条目,直接输出当前行内容+
map数组中对应的数值,完全保留file1的重复条目和原有顺序
可选优化(无匹配项处理)
如果需要过滤掉file1中在file2里没有匹配的条目,可以调整为:
awk 'FNR==NR {map[$1]=$2; next} $1 in map {print $0, map[$1]}' file2.txt file1.txt
内容的提问来源于stack exchange,提问作者juylmin
相关产品推荐
相关产品推荐

