Sorting 如何在unix中连接文件而不进行排序
我正在尝试在unix中基于密钥加入2个csv文件 我的每个文件都非常大,5GB,对它们进行排序太长了 我想对50个这样的连接重复这个过程Sorting 如何在unix中连接文件而不进行排序,sorting,unix,csv,join,Sorting,Unix,Csv,Join,我正在尝试在unix中基于密钥加入2个csv文件 我的每个文件都非常大,5GB,对它们进行排序太长了 我想对50个这样的连接重复这个过程 有人能告诉我如何不排序而快速地联接吗。下面是一个示例,其中两个文件的数据由管道分隔 来自employee.csv的数据,其关键员工id、姓名和部门id由管道分隔 Employee.csv 4|John | 10 1|Monica|4 12|Louis|5 20|Peter|2 21|David|3 13|Barbara|6 部门id为且名称由管道分隔的部门文
有人能告诉我如何不排序而快速地联接吗。下面是一个示例,其中两个文件的数据由管道分隔 来自employee.csv的数据,其关键员工id、姓名和部门id由管道分隔 Employee.csv
4|John | 10
1|Monica|4
12|Louis|5
20|Peter|2
21|David|3
13|Barbara|6
部门id为且名称由管道分隔的部门文件。
部门csv
命令:
join -t “|” -1 3 -2 1 Employee_sort.csv Dept.csv
-t“|”表示的文件由管道分隔
-1 3用于文件1的第三列,即来自Employee_sort.csv文件的部门id
-2 1文件2的第一列,即Dept.csv文件中的部门id
通过使用上述命令,我们得到以下输出
2|20|Peter| Manufacturing
3|21|David| Engineering
4|1|Monica| Marketing
5|12|Louis| Sales
6|13|Barbara| Information technology
如果您想从文件2中获取所有内容以及文件1中的相应条目
您还可以使用-a和-v选项
尝试以下命令
join -t “|” -1 3 -2 1 -v2 Employee_sort.csv Dept.csv
join -t “|” -1 3 -2 1 -a2 Employee_sort.csv Dept.csv
不幸的是,没有办法进行排序。但是请看一下我在这里写的一些实用程序脚本:()。如果将列名的标题保留为每个文件的第一行,则可以使用它们。有一个脚本“tbljoin”将为您处理排序和列计数。例如,假设你有 Employee.csv: 部门csv:
department_id|department_name
1|HR
2|Manufacturing
3|Engineering
4|Marketing
5|Sales
6|Information technology
7|Security
然后命令tbljoin Employee.csv Dept.csv
生成
employee_id|employee_name|department_id|department_name
20|Peter|2|Manufacturing
21|David|3|Engineering
1|Monica|4|Marketing
12|Louis|5|Sales
13|Barbara|6|Information technology.
制表器包含许多其他有用的功能,例如,用于简单地重新排列列。我认为您可以避免使用join(从而对文件进行排序),但这不是一个快速的解决方案:
sed-i的///g;s///g'Employee.csv Dept.csv
cat Employee.csv |在读取a b c时
做
cat Dept.csv |读取数据时
做
如果[“$c”-等式“$d”];然后
echo-e“$a\t$b\t$c\t$e”
fi
完成
完成
我看不出它是如何回答这个问题的。您的文件已排序。询问者没有分类。
department_id|department_name
1|HR
2|Manufacturing
3|Engineering
4|Marketing
5|Sales
6|Information technology
7|Security
employee_id|employee_name|department_id|department_name
20|Peter|2|Manufacturing
21|David|3|Engineering
1|Monica|4|Marketing
12|Louis|5|Sales
13|Barbara|6|Information technology.