mysql - 如何进行低 RAM 完全交叉连接?

标签 mysql unix memory awk cross-product

我希望对点的大型数据文件执行完全自交叉连接。但是,我无法使用编程语言来执行操作,因为我无法将其存储在内存中。我想找到集合中所有点的组合。下面是我的数据集的示例。

x y 
1 9 
2 8 
3 7 
4 6 
5 5 

我想交叉连接此数据以生成包含所有点组合的 25 行表。会有低内存解决方案吗?也许用 awk

谢谢,

尼古拉斯海登

附言我是一名新手程序员。

最佳答案

也许分两步,创建一个头文件、column1 和 column2 文件并加入 column1 和 column2 并附加到头文件

awk 'NR==1{print > "cross"} NR>1 {print $1 > "col1"; print $2 > "col2"}' file
join -j9 col1 col2 -o1.1,2.1 >> cross
rm col1, col2

显然要确保临时文件名和最终文件名不会与现有文件名冲突。

请注意,MacOS 上的 join 命令没有 -j 选项,因此请将其更改为等效的长格式

join -19 -29 col1 col2 -o1.1,2.1 >> cross

在这两种选择中,我们要求 join 使用不存在的第 9 个字段作为键,该键将第一个文件的每一行与第二个文件的每一行相匹配,以生成两个文件的叉积。

关于mysql - 如何进行低 RAM 完全交叉连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43422037/

相关文章:

c# - mysql 不接受正确格式的小数

mysql - 如何让 MySQL 以不同的用户身份写入输出文件?

php 从数据库中获取列值并显示在 html 表列中

unix - 移动具有日期编码名称的文件集

C++ 为什么在传递类指针时调用析构函数?

c - 如何在 C 中使用 malloc 和 realloc 正确分配结构中的数组?

php - mysql 查询没有获取所有帖子

c++ - 如何使用 fgets 获取整行

linux - 如何将 stderr 重定向到 stdout 和 stderr 本身

c++ - 我可以访问地址零吗?