Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash Join无法连接整个文件_Bash_Join - Fatal编程技术网

Bash Join无法连接整个文件

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

我正在尝试使用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.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的合并阶段。现在我们都知道了。