2

join を使用して、約 450 万行のファイルに列を追加しようとしています。ファイルは最初の列でソートされます。ファイル1の最初の列のすべての数値は、ファイル2の最初の列にあります。「結合FILE1 FILE2>出力」を使用すると、最初の1000行程度で機能し、その後停止します...

私は結合という考えに固執しておらず (プログラムが正しく動作しないようです)、これらのファイルに結合する他の方法を受け入れています。grep を試しましたが、4*10^6 レコードに対して grep でこれを行うと非常に遅くなります。以下は、私が扱っているデータのサンプルです。

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
4

1 に答える 1

4

ファイルは数値join順にソートされますが、辞書順 (1 < 10 < 2 < 200 < 3) でソートされることが期待されます。を使用しjoin <(sort FILE1) <(sort FILE2)ます。ただし、(コメントで提案されているように) データベースの使用を検討してください。

于 2013-05-03T20:53:38.530 に答える