使用awk匹配key时仅输出指定列、其余输出整行的问题求助
你现有脚本的问题是仅对匹配到key的行做了打印操作,未匹配的行没有对应处理逻辑,直接被忽略了。
修正后的脚本如下:
awk 'FNR == NR {key[$1]; next} { if ($2 in key) { print $1, $2 } else { print $0 } }' keyfile mainfile > outfile
逻辑说明:
- 前半段
FNR == NR {key[$1]; next}逻辑保持不变,先读取keyfile的所有第一列值存入关联数组key,读完keyfile前不会执行后续逻辑 - 新增的外层大括号会对mainfile的每一行都执行判断:
- 若第二列存在于key数组中,仅输出前两列
- 若不存在匹配,输出整行内容
执行后得到的outfile和你期望的结果完全一致。
内容的提问来源于stack exchange,提问作者EverLearner
相关产品推荐
相关产品推荐

