【问题标题】:joining two csv files based on a column基于列连接两个 csv 文件
【发布时间】:2016-08-12 13:12:28
【问题描述】:

我有 2 个 csv 文件如下

AllEmpployees.txt
EmpID,Name

QualifiedEmployeees.csv
Empid

现在我想查找合格员工的姓名

Empid,Name

我正在使用以下命令

   join -t , -1 1 -2 1 QualifiedEmployeees.csv AllEmployees.txt

这导致零记录。我确定有一个employeeids 的交集。

参考:https://superuser.com/questions/26834/how-to-join-two-csv-files

是不是因为合格的员工档案只有一列并且没有分隔符?还是我做错了什么

【问题讨论】:

  • 你能显示cat -vte AllEmployees.txt命令的前几行输出吗
  • EmpID != Empid
  • EmpID 是什么意思!= Empid?我的 csv 中没有标题。这只是为了解释
  • 不知道为什么我的问题被否决了。这不好。我已提供有关所面临问题的完整详细信息。

标签: linux bash shell csv


【解决方案1】:

试试这个:

join -t "," <(dos2unix <QualifiedEmployeees.csv) <(dos2unix <AllEmpployees.txt)

【讨论】:

  • 工作!谢谢。但是它产生重复记录,因为 fullEmployess.txt 有重复记录
  • 对不起,我不能用你的例子重现这个。
  • @AbuShoeb:我建议你用一个例子开始一个新问题。
  • @Cyrus 我刚刚做了。如果可能,请提供帮助。
【解决方案2】:

如果join 不起作用(没有产生预期的行数,或者根本没有行),很可能是因为您的输入未排序。从man join 我们可以看到:

当使用默认的字段分隔符时,要连接的文件应该在 sort(1) 的排序序列,使用 -b 选项,在它们要连接的字段上,其他 - erwise join 可能不会报告所有字段匹配。当字段分隔符由 -t 选项,排序顺序应该与不带 -b 选项的 sort(1) 相同。

【讨论】:

  • 我的数据已排序。请查看编辑帖子中的真实数据示例
【解决方案3】:
awk -F, 'FNR==NR{a[$1];next}($1 in a){print $2}' Qualiedemployees.txt allEmployees.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2013-09-29
    • 2012-10-11
    • 2021-11-06
    • 2015-12-20
    • 2018-04-27
    相关资源
    最近更新 更多