2016-08-02 7 views
1

2つの大きなファイルがあります。2つの大きなファイルで一致するIDを見つける

FILE1このフォーマット160万行を持っています問題は、すべて等しいID Sを検索し、それらを保存することであるid:hash

id:email

FILE2この形式と45万行を有します3番目のファイルには、形式:email:hash

試してみてください:

awk -F':' 'NR==FNR{a[$1]=$2;next} {print a[$1]":"$2}' test1.in test2.in > res.in 

しかし、それは:(

FILE1を働いていない:

9305718:[email protected] 
59287478:[email protected] 

FILE2

21367509:e90100b1b668142ad33e58c17a614696ec04474c 
9305718:d63fff1d21e1a04c066824dd2f83f3aeaa0edf6e 

望ましい結果:

GNUで
+0

160メートルレコードはおそらくメモリに収まらないでしょう。これらのファイルはIDでソートされていますか?もしそうなら、 'join'はこのタスクのより良いツールです。 – karakfa

+0

はい、ソートされています。しかし、すべてのIDが2番目のファイルにあるわけではありませんが、これは問題ではありませんか? –

+0

Example * file2 *データはソートされていません。それはすべきでしょうか? @ karakfa; – agc

答えて

1

が参加し、GNUのbashの:

join -t : -j 1 <(sort -t : -k1,1 file1) <(sort -t : -k1,1 file2) -o 1.2,2.2 

更新:AWKで

join -t: <(sort file1) <(sort file2) -o 1.2,2.2 
+0

;ありがとうございました。私は私の答えを更新しました。 – Cyrus

+0

nji $ join -t:<(sort test1.in)<(sort test2.in)-o 1.2,2.2 使用法:join [-a fileno | -v fileno] [-e string] [-1 field] [-2 field] [-o list] [-t char] file1 file2 –

+0

試行: join -t:-o 1.2,2.2 <(sort test1。 )で<(ソートtest2.in) :d63fff1d21e1a04c066824dd​​2f83f3aeaa0edf6e :両方の入力は*すでにソートされている*場合361e7976e4b783517aca819caf1322c2e0b8cd32 –

0

(あなたが利用可能なリソースの量を考慮しない):

$ awk -F':' 'NR==FNR{a[$1]=$2;next} a[$1] {print a[$1]":"$2}' test1.in test2.in 
[email protected] :d63fff1d21e1a04c066824dd2f83f3aeaa0edf6e 
関連する問題