Если искомая подстрока имеет одинаковую длину и позицию в целевой строке (скажем, последние 6 цифр), тогда вы можете предварительно обработать список в массив, и вам будет хорошо идти.
Шаг предварительной обработки (возможно, в цели BEGIN
)
n=split(numbers_list,a," "); # Rip in input sting into pieces
for ( num in a ) {
key=substr(a[num],length(a[num])-6,6); # Get the last six digits
# Error processing (i.e. collision handling) should go here
list[key]=a[num];
}
Тогда, когда вам нужно сделать поиск
i=list[substr($5,9)] # i is now the full number associated with the key
Это только выигрыш, если вы будете выполнять много поисков, потому что вам все равно придется заплатить стоимость итерации по всему списку (фактически, дважды) во время предварительной обработки.
Обратите внимание, что точное соответствие целому числу квалифицируется как подстрока известной длины и позиции, просто используйте key=a[num]
(это выглядит забавно и приводит к нескольким упрощениям приведенного выше кода, но я уверен, что вы можете понять это ).
Если вы ищете любое вхождение substring($5,9)
в любом из чисел, это не сработает, вам придется каждый раз повторять n
.