Bash Join无法连接整个文件
我正在尝试使用join将一列添加到一个大约有4.5M行的文件中。文件按其第一列排序。文件1第一列中的所有数字都在文件2中的第一列中。当我使用“joinfile1file2>output”时,它在前1000行左右工作,然后停止 我不赞成加入(这个程序似乎永远不会正常工作)的想法,也不愿意以其他方式加入这些文件。我试过grep,但grep对4*10^6记录执行此操作非常慢。下面是我正在处理的数据示例Bash Join无法连接整个文件,bash,join,Bash,Join,我正在尝试使用join将一列添加到一个大约有4.5M行的文件中。文件按其第一列排序。文件1第一列中的所有数字都在文件2中的第一列中。当我使用“joinfile1file2>output”时,它在前1000行左右工作,然后停止 我不赞成加入(这个程序似乎永远不会正常工作)的想法,也不愿意以其他方式加入这些文件。我试过grep,但grep对4*10^6记录执行此操作非常慢。下面是我正在处理的数据示例 FILE 1 964 0 0.0 0.0 0.0 0.0 1.0 - 965 0 0.0 1.0 0
FILE 1
964 0 0.0 0.0 0.0 0.0 1.0 -
965 0 0.0 1.0 0.0 0.0 0.0 -
966 0 0.0 0.0 0.0 0.0 1.0 -
967 0 0.0 0.0 0.0 0.0 1.0 -
968 0 0.0 1.0 0.0 0.0 0.0 -
969 0 0.0 0.0 0.0 1.0 0.0 -
970 0 0.0 0.0 1.0 0.0 0.0 -
971 0 0.0 1.0 0.0 0.0 0.0 -
1075 3 4.0 0.0 0.0 0.0 0.0 -
1076 0 4.0 0.0 0.0 0.0 0.0 -
1077 0 0.0 0.0 4.0 0.0 0.0 -
1078 0 0.0 0.0 0.0 4.0 0.0 -
File 2
964 T
965 C
966 T
967 G
968 C
969 T
970 G
971 C
972 G
973 G
974 T
975 G
976 C
977 T
978 G
979 G
980 C
981 T
982 G
output (Last few lines)
965 0 0.0 1.0 0.0 0.0 0.0 - C
966 0 0.0 0.0 0.0 0.0 1.0 - T
967 0 0.0 0.0 0.0 0.0 1.0 - G
968 0 0.0 1.0 0.0 0.0 0.0 - C
969 0 0.0 0.0 0.0 1.0 0.0 - T
970 0 0.0 0.0 1.0 0.0 0.0 - G
971 0 0.0 1.0 0.0 0.0 0.0 - C
9990 0 0.0 0.0 0.0 0.0 0.0 - T
9991 0 0.0 0.0 0.0 0.0 0.0 - C
编辑
字典格式的排序适用于463835之后的所有记录。我认为这是因为它对输入文件的排序不同,可能是因为其他列的缘故
FILE 1
466630 0 0.0 0.0 0.0 0.0 0.0 -
46663 0 0.0 0.0 0.0 3.0 0.0 -
466631 0 0.0 0.0 0.0 0.0 0.0 -
FILE 2
466639 C
46663 A
466640 G
您的文件是按数字排序的,但
join
希望它们按字典顺序排序(1<10<2<200<3)。使用join您的文件是按数字排序的,但是join
希望它们按字典顺序排序(1<10<2<200<3)。使用连接需要连接的450万行:使用数据库的时间;这就是它们被发明的目的。(现在我很好奇join是怎么做的,如果你违反了一些内部限制(但至少应该抱怨一下))。@msw我同意数据库的建议,但是join失败了,因为排序顺序(目前是数字的,但join需要字典)就因为我在评论中问了这个问题:join
使用了一种简单、老式的外部(磁带)合并算法。因为每个文件中最多有几行同时在核心中,所以没有可以超出的限制。这确实解释了为什么需要对文件进行排序,因为这类似于更知名的mergesort的合并阶段。现在我们都知道了。450万行需要连接:是时候使用数据库了;这就是它们被发明的目的。(现在我很好奇join是怎么做的,如果你违反了一些内部限制(但至少应该抱怨一下))。@msw我同意数据库的建议,但是join失败了,因为排序顺序(目前是数字的,但join需要字典)就因为我在评论中问了这个问题:join
使用了一种简单、老式的外部(磁带)合并算法。因为每个文件中最多有几行同时在核心中,所以没有可以超出的限制。这确实解释了为什么需要对文件进行排序,因为这类似于更知名的mergesort的合并阶段。现在我们都知道了。