加入无法加入整个文件

时间:2013-05-03 20:42:47

标签: bash join

我正在尝试使用join将列添加到大约4.5M行的文件中。文件按其第一列排序。文件1的第一列中的所有数字都在文件2的第一列中。当我使用“join FILE1 FILE2> 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

EDIT 以字典格式排序适用于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

1 个答案:

答案 0 :(得分:4)

您的文件以数字方式排序,但join期望它们按字典顺序排序(1 <10 <2 <200 <3)。使用join <(sort FILE1) <(sort FILE2)。但是(正如评论中所建议的那样)确实考虑使用数据库。