如何使用awk比较两个文件 为文件2条目新增存在性标记列
问题原因及修复方案
原代码错误点
- 输入文件顺序颠倒:需要先读取仅含单列的file1构建ID匹配集合,你当前代码先读取了file2,逻辑完全倒置。
- 仅输出匹配成功的行:没有处理仅存在于file2的条目,会丢失file2的部分内容,不符合保留全部条目的要求。
- 标记内容错误:你输出的是ID本身而非要求的
1/2标记。 - 标记插入位置错误:你将标记加在整行末尾,不符合示例中插入到第一列后的要求。
正确代码
awk 'FNR==NR{arr[$1];next} {$1 = $1 " " ($1 in arr ? 2 : 1)}1' file1 file2 > file3
代码逻辑说明
- 处理第一个输入文件
file1时,将每行第一列作为key存入数组arr,仅标记存在性无需存储值,next跳过后续逻辑直接处理下一行。 - 处理第二个输入文件
file2时,判断当前行第一列是否在arr中:存在则拼接标记2到第一列后,不存在则拼接标记1到第一列后。 - 末尾的
1是awk常用简写,等价于{print},输出修改后的整行内容,运行结果和你给出的期望输出完全一致。
内容的提问来源于stack exchange,提问作者kllrdr
相关产品推荐
相关产品推荐

