You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux环境下如何匹配file1数据到file2第二列并删除对应行

需求与解决方案

现有文件内容

  • file1:
1
2
3
4
5
6
  • file2:
ab|1|234|ks|
fg|6|567|fg|
fg|19|576|ik|
sd|3|879|jh|

需求说明

删除file2中第二列数值存在于file1里的行,最终仅保留fg|19|576|ik|这一行。


解决方法

方法一:用awk处理(推荐,逻辑清晰)

执行命令:

awk -F'|' 'NR==FNR{a[$1];next}!($2 in a)' file1 file2

逻辑说明:

  • -F'|' 指定竖线|作为列分隔符
  • 先读取file1,把每行的数值存入数组a
  • 读取file2时,判断第二列$2是否不在数组a中,符合条件的行直接打印

方法二:用grep+sed组合处理

执行命令:

grep -v -F -f <(sed 's/^/|/;s/$/|/' file1) file2

逻辑说明:

  • sed 's/^/|/;s/$/|/' file1 给file1的每个数值前后加上竖线,变成|1|、|2|格式,避免误匹配(比如防止把19里的1当成匹配项)
  • -f <(...) 将sed处理后的内容作为grep的匹配规则
  • -v 输出不匹配的行,-F 按固定字符串匹配(不启用正则)

两种方法执行后都会得到预期输出:

fg|19|576|ik|

内容的提问来源于stack exchange,提问作者Archana Vinod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:06:24