如何用grep或Unix命令匹配两文件target_id并提取file1匹配行
解决方法:保留file1中与file2匹配的target_id行
你的命令问题出在两个核心点:
- 文件顺序颠倒:你当前是在file2中搜索file1的内容,但需求是从file1里筛选匹配file2的行
-x参数不适用:-x要求整行完全匹配,但file1的每行除了target_id还有其他内容,无法和file2的单行target_id匹配
下面是两种可行的解决方法:
方法1:用grep匹配第一列
假设文件是制表符分隔(如果是空格分隔,把cut -f1改成cut -d' ' -f1):
grep -F -f <(cut -f1 file2) file1
cut -f1 file2:提取file2的第一列target_id列表<(...):将cut的输出作为临时模式文件传给grep-F:将模式当作固定字符串处理,避免正则特殊字符干扰
方法2:用awk(更灵活,适配复杂格式)
awk 'NR==FNR{ids[$1]=1; next} $1 in ids' file2 file1
- 处理file2时,把所有target_id存入数组
ids - 处理file1时,仅打印第一列存在于
ids中的行
内容的提问来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

