由于内存限制,这可能会失败。我调用了具有 3 列的文件 file1 和具有 ID 的 file2 将代码段复制并粘贴到文件中并根据需要编辑名称。
第一步:使文件 1 尽可能小。
#/bin/bash
declare -a Array
Count=0
不需要第一列和第三列,因此删除它们,对文件进行排序,然后仅获取唯一条目。
InitFile ()
{
while IFS=, read ignore1 stuff ignore2; do echo $stuff ; done < file1| sort -n | uniq > $1
}
读入一个数组:
InitArray ()
{
while read Array[$Count]; do
let Count++
done < $1
}
二分查找数组中的值:
BinarySearch ()
{
val=$1
let idx=$Count/2
top=$Count
bottom=0
while true; do
if [ ${Array[$idx]} -eq $val ]; then return 0; fi
lastIdx=$idx
if [ $top -le $bottom ]; then return 1; fi
if [ $val -lt ${Array[$idx]} ]; then top=$idx && let idx=$idx/2;
elif [ $val -gt ${Array[$idx]} ]; then bottom=$idx && let idx=($top+$bottom)/2; fi
if [ $idx -eq $lastIdx ]; then let bottom=$bottom+1 ; fi
done
}
uniqueOwnerIdFile 将从第一个文件创建,然后放入数组
InitFile uniqueOwnerIdFile
InitArray uniqueOwnerIdFile
遍历第二个文件的每一行并在所有者 ID 数组中查找这两个值。将找到的每一个回显到 linesTheExistFile。
while IFS=, read firstVal secondVal; do
if BinarySearch $firstVal && BinarySearch $secondVal ; then echo "$firstVal,$secondVal" ; fi
done < file2 > linesThatExistFile