I have a few to questions pose in response first:-
What OS, shell and version are you using?
What logical process have you considered? (to help steer us to follow what you are trying to achieve)
What are the rules for causing an alert? Is it simply the record being mentioned 3 or more times?
What is the format of the Test.log file?
Looking at the code, for every record in po_numbers you are reading the full Test.log file. That is the target - reduce the number of times you read a huge file.
There are probably many ways to achieve most tasks, so giving us an idea of your style and thoughts will help us guide you to an answer most suitable to you so you can adjust it to suit your needs in future.
awk -v s='^PO_Number=' '
NR==FNR {
A[$1]
next
}
{
for(i=1; i<=NF; i++)
if (sub(s,x,$i))
if ($i in A)
C[$i]++
}
END {
for(i in C) print i " --> " C
}
' po_numbers Test.log > list3
match = set(line.strip() for line in open('po_numbers'))
count = {}
for po_num in open('Test.log').read().split():
if po_num in match:
if po_num in count:
count[po_num] += 1
else:
count[po_num] = 1
f = open('po_to_server', 'w')
for po_number in match:
if po_number in count:
print(po_number, count[po_number])
else:
print(po_number, 0)
f.write(po_number + '\n')
f.close()
awk -v s='^PO_Number=' '
NR==FNR {
A[$1]
next
}
{
for(i=1; i<=NF; i++)
if (sub(s,x,$i))
if ($i in A)
C[$i]++
}
END {
for(i in A) {
if (i in C)
print i " --> " C
else
print i > "po_to_server"
}
}
' po_numbers Test.log > list3
Thank You :) Scrutinizer.
Must appreciated your response.
It worked for me. and the result is really very fast(in seconds.)
I wonder if I could do a uppercase for the input data(po_numbers) for checking in log file as well or the other way around, but i thing tweaking with the search string in the log file for both upper and lower case values will increase the search time.
So,if the input $po itself comes as uppercase then we'll be good in this case.
Certainly you can do the counting with the array A (no need for a separate array C ).
Of course you need an if (A) condition in the END section.
Is counting required at all?