#!/bin/awk
BEGIN {
while(getline var < compareTo > 0)
{
orderIds[var]=var;
}
}
{
if(orderIds[$0] == "")
{
print $0;
}
}
次に実行
awk -v compareTo="ids.log.remote" -f sample.awk ids.log.local
可能ですが、HashMapのような連想配列を使用する代わりに、awkにHashSetのようなものがありますか?
私にスケジュールがあります。
bash-3.2$ time grep -xFvf ids.log.local ids.log.remote > /dev/null
real 0m0.130s
user 0m0.127s
sys 0m0.002s
bash-3.2$ time grep -xFvf ids.log.local ids.log.remote > /dev/null
real 0m0.126s
user 0m0.125s
sys 0m0.000s
bash-3.2$ time grep -xFvf ids.log.local ids.log.remote > /dev/null
real 0m0.131s
user 0m0.128s
sys 0m0.002s
bash-3.2$ time awk 'NR == FNR {
orderIds[$0]; next
}
!($0 in orderIds)
' ids.log.local ids.log.remote > /dev/null
real 0m0.053s
user 0m0.051s
sys 0m0.003s
bash-3.2$ time awk 'NR == FNR {
orderIds[$0]; next
}
!($0 in orderIds)
' ids.log.local ids.log.remote > /dev/null
real 0m0.052s
user 0m0.051s
sys 0m0.001s
bash-3.2$ time awk 'NR == FNR {
orderIds[$0]; next
}
!($0 in orderIds)
' ids.log.local ids.log.remote > /dev/null
real 0m0.053s
user 0m0.051s
sys 0m0.002s
bash-3.2$ time awk -v compareTo="ids.log.local" -f checkids.awk ids.log.remote > /dev/null
real 0m0.066s
user 0m0.060s
sys 0m0.006s
bash-3.2$ time awk -v compareTo="ids.log.local" -f checkids.awk ids.log.remote > /dev/null
real 0m0.065s
user 0m0.058s
sys 0m0.008s
bash-3.2$ time awk -v compareTo="ids.log.local" -f checkids.awk ids.log.remote > /dev/null
real 0m0.061s
user 0m0.053s
sys 0m0.007s
@Dimitre Radoulov awkが速いようです。ありがとうございます。
ベストアンサー1
私はこれがawkで最も効率的な方法だと思います。
awk 'NR == FNR {
orderIds[$0]; next
}
!($0 in orderIds)
' ids.log.remote ids.log.local
grepを試してみることもできます。
grep -xFVf ids.log.remote ids.log.local