2017-04-10 9 views
0

私はマージする必要がある2 csvファイルを持っているを使用して2つの大部分は不均等なファイルをマージ、ファイル1は約20gbであり、他は~1000ラインを持っています。そのため、大きなサイズの私は、最初のパンダパンダやawkの

File1:大きなファイルは、以下の通りであるを使用してマージ/ロードより大きなファイルを反復して、(たとえばFILE1)小さいファイルに大きなファイルをフィルタリングしたい

col1,col2,col3 
1,1,1491795901021327897 
1,2,1491795901021342873 
1,3,1491795901021347247 
1,4,1491795901021351620 
1,5,1491795901021356612 
1,6,1491795901021361172 
1,7,1491795901021366797 

小さいファイルは、私が10*10**10(value at col1) + val at col2をすることによって、同様col4,5を使用して小さなファイルに両方のファイルから単一のキーを作成することでしたやった

col1,col2,col3,col4,col5,col6 
val1,val2,val3,1,6,1412414141412414 
val1,val2,val3,1,3,1434252352352325 

一つの方法以下の通りです。この値をリストとして保存し、値がリストに存在する場合は行ごとに大きな行にその行を出力します。最終的に小さなフィルタリングされたファイルが印刷されます。 Pythonやawkを使ってこれを行うより良い方法がありますか?

究極の目的は、マージすることですが、20ギガバイトはパンダにロードすることはできませんので、私は私のファイルをフィルタリングし、それが小さくなっています。私はこれに接近するより良い方法がなければならないと確信しています。

+0

予想される出力を貼り付けてください。 –

+0

マージの一般的なキーは何ですか?投稿されたデータを使用した例とマージされたファイルの構造は何ですか? '4,5 '番目のフィールドを' 1,2'にマッチさせて、小さなファイルに基づいて大きなファイルをフィルタリングしていますか? – karakfa

+0

は 'あなたは1,2に4,5thフィールドを照合することによって、小さなファイルに基づいて、大きなファイルをフィルタリングしていますか? 'はい正確に – pythonRcpp

答えて

0

awkレスキュー!

は外挿によって、私はそれはあなたが

$ awk 'BEGIN  {FS=OFS=","} 
     NR==1  {h=$0; next} 
     NR==FNR  {a[$4,$5]=$0; next} 
     FNR==1  {print h,$3} 
     ($1,$2) in a {print a[$1,$2],$3}' small large 

col1,col2,col3,col4,col5,col6,col3 
val1,val2,val3,1,3,1434252352352325,1491795901021347247 
val1,val2,val3,1,6,1412414141412414,1491795901021361172 

読みやすいべきである望むものだと思うが、私は私の解釈にフィードバックを得る場合、私は説明を書くことができます。

+0

あなたの解釈は正しいです。あなたもあなたの説明を追加してください:) – pythonRcpp

0

これを試してみてください -

$ head f? 
==> f1 <== 
col1,col2,col3 
1,1,1491795901021327897 
1,2,1491795901021342873 
1,3,1491795901021347247 
1,4,1491795901021351620 
1,5,1491795901021356612 
1,6,1491795901021361172 
1,7,1491795901021366797 

==> f2 <== 
col1,col2,col3,col4,col5,col6 
val1,val2,val3,1,6,1412414141412414 
val1,val2,val3,1,3,1434252352352325 
$ awk -F, 'NR==FNR{a[$4 FS $5]=$6;next} ($1 FS $2) in a {print $0 FS a[$1 FS $2]}' f2 f1 
1,3,1491795901021347247,1434252352352325 
1,6,1491795901021361172,1412414141412414 

が説明 -

f2$4FS$5$1FS$2とマッチングされている場合、すべての内容を印刷し、ファイル f2から $4FS$5を使用して、ファイル f1$1FS$2のキーとそれにマッチ

作成したキーファイルf1とファイルf2$6から