2つのソートされたリストに一意の要素が含まれていることを確認する最速の方法

2つのソートされたリストに一意の要素が含まれていることを確認する最速の方法

A2つのソートされたファイルがあり、BサイズがAはるかに大きいですB。たとえば、Aは100GB、Bは50MBです。欲しい早くの行Bがに含まれていることを確認し、一致するAものがあれば停止します。現在、この目的のためのPythonスクリプトがありますが、他のプロセスに対して何千回もプロセスを繰り返す必要がある場合は遅くなりますB

ベストアンサー1

を使用すると、fifoを使用してcomm最初の一致でスクリプトを返すことができます。head

#!/bin/bash -e 

[ -p tmpfifo ] || mkfifo tmpfifo
comm -12 A B | head -n1 >tmpfifo &

# If this wc is zero, no matches.  Otherwise, a match was found. 
# You can use this directly in the script, echo it, 
# change the script exit value, or however else you need to use it.
wc -l tmpfifo 

現在、これはバックグラウンドで通信を続けており、PID殺す権利(殺人ではなく$!与えるもの)を見つけるのに苦労しています。これが実行中の唯一の通信であると確信している場合は機能しますが、他の通信が実行されている場合は危険です。 headcommkillall

おすすめ記事