如何使用awk或sed基于值列表将文件拆分为两个部分
单趟awk实现同时输出两个拆分文件
直接修改你的原有awk逻辑,增加条件分支即可,不需要重复读取文件,一次运行就能生成两类结果:
awk 'NR == FNR {a[$1]; next} { if ($1 in a) { print > "in_list."'"$i"' } else { print > "no_in_list."'"$i"' } }' "$i.list" "$i"
逻辑说明
- 和你原有代码的前半段逻辑完全一致:先读取样本列表文件
$i.list,把所有样本ID存入数组a - 处理主文件
$i时新增分支判断:- 当前行第一列存在于数组
a中,写入匹配成功文件in_list.$i - 当前行第一列不存在于数组
a中,写入匹配失败文件no_in_list.$i
- 当前行第一列存在于数组
可选适配(主文件带表头)
如果你的主文件第一行是表头需要同时保留在两个输出文件里,用以下调整后的命令:
awk 'NR == FNR {a[$1]; next} FNR == 1 { print > "in_list."'"$i"' print > "no_in_list."'"$i"' next } { if ($1 in a) { print > "in_list."'"$i"' } else { print > "no_in_list."'"$i"' } }' "$i.list" "$i"
内容的提问来源于stack exchange,提问作者Codezy
相关产品推荐
相关产品推荐

