在 Solaris 中合并(连接)2 个巨大的平面文件,使用索引列(第一个字段)



我在Unix(Solaris)中有2个巨大的平面文件,每个文件大约500-600 GB。我需要使用第一列将 2 个文件合并为一个平面文件,该列将是键索引列。如何以优化的方式做到这一点?

基本上它应该是 2 个平面文件之间的内部联接。尝试使用平面文件的原因是,我们有 2 个巨大的表,它们被分成 2 个单独的表,并被提取为 2 个平面文件,我正在尝试在 Unix 级别而不是数据库级别加入它。

我确实使用了以下命令:

sort -n file1 > file_temp1;
sort -n file2 > file_temp2;
join -j 1 -t';' file_temp1 file_temp2 > Final

它适用于排序,因为第一个字段是索引列。但是,当连接发生时,我在 Final 文件中几乎不会得到 2% 的数据。所以只是想了解我在加入命令中犯了什么错误?这两个文件都包含大约 .200 万条记录,并且所有记录在 2 个文件之间都匹配。我想对在 unix 上进行的连接进行性能检查,是否比在数据库级别执行的连接更好。抱歉问题不完整!第一个字段是数值索引字段。我们是否有类似"-n"开关的东西来指示第一个字段是数字索引的连接?

不应该sort -n,因为join没有相应的-n标志。只需保持所有前导/尾随空格不变:

#!/bin/sh
sort -t';' -k 1 file1 > file1.srt
sort -t';' -k 1 file2 > file2.srt
join -t';' -1 1 -2 1 file1.srt file2.srt > both
#cat both

最新更新