如何匹配file1与file2首列 提取对应列写入file3文件
解决方案
你原命令没有正确处理分隔符、匹配逻辑和输出字段,用下面的命令即可得到预期结果:
awk -F'|' 'NR==FNR{if($0!="")a[$0]=1;next} $1 in a{print $1"|"$2}' file1.txt file2.txt > file3.txt
命令逻辑说明
-F'|':指定字段分隔符为竖线|,awk会自动将每行按|切分为独立的列,$1对应第一列编号、$2对应第二列状态NR==FNR{if($0!="")a[$0]=1;next}:处理第一个输入文件file1.txt时,跳过空行,将所有有效编号存入数组a作为匹配依据,读完当前行直接跳转处理下一行,不执行后续逻辑$1 in a{print $1"|"$2}:处理第二个输入文件file2.txt时,判断当前行第一列的编号是否存在于数组a中,如果匹配成功,就拼接第一列、竖线分隔符、第二列状态打印输出,正好符合你要的file3.txt格式
原命令失效原因
你之前使用的命令:
awk 'NR==FNR{a[$0]}NR>FNR && $0 in a{print}' file1 file2 > file3
存在三个问题导致结果不符合预期:
- 没有指定
|作为字段分隔符,awk默认按空白字符分割列,无法正确提取file2里的编号列 - 处理file2时拿整行内容(包含后续状态、时间等后缀)去匹配file1里存的纯编号,完全无法命中匹配规则
- 匹配成功后直接打印整行内容,没有提取需要的前两列,就算命中也输出不了目标格式
内容的提问来源于stack exchange,提问作者hadesungod
相关产品推荐
相关产品推荐

