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

Shell脚本:两未排序文件按指定键关联并提取指定列

解决方案

你的问题出在两个地方:一是用了-a 2参数(会保留文件2中无匹配的记录),二是join命令要求输入文件必须按关联键排序,而你的文件是未排序的,导致匹配逻辑失效。

正确步骤

要实现仅输出匹配记录,同时指定输出列,需要先对两个文件按关联键排序,再用join处理,还要单独处理表头避免排序混乱:

  1. 生成输出表头
    提取文件1的完整表头和文件2的第6列表头,合并后写入结果文件:

    paste -d'|' <(head -n1 file1) <(head -n1 file2 | awk -F'|' '{print $6}') > out_file
    
  2. 处理数据行并关联
    分别对两个文件的数据行(跳过表头)按关联键排序,再用join匹配,指定输出文件1所有列+文件2第6列,追加到结果文件:

    join -t'|' -1 1 -2 3 -o 1.1,1.2,1.3,2.6 \
      <(tail -n+2 file1 | sort -t'|' -k1,1) \
      <(tail -n+2 file2 | sort -t'|' -k3,3) >> out_file
    

命令参数说明

  • -t'|':指定字段分隔符为|
  • -1 1:指定文件1的关联键是第1列
  • -2 3:指定文件2的关联键是第3列
  • -o 1.1,1.2,1.3,2.6:指定输出列:文件1的第1、2、3列,加上文件2的第6列
  • 用<(...)实现排序后的数据流直接作为join的输入,无需生成临时文件

执行结果

运行后out_file内容和你的期望输出一致:

Username| Status| Managername| Access
4115    |  Open  | X |Never

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:22:17