Manera eficiente de comparar en awk

#!/bin/awk BEGIN { while(getline var < compareTo > 0) { orderIds[var]=var; } } { if(orderIds[$0] == "") { print $0; } } 

Corriendo como

 awk -v compareTo="ids.log.remote" -f sample.awk ids.log.local 

Esto está funcionando, pero en lugar de utilizar matrices asociativas (como HashMap), ¿hay algo así como un HashSet en awk?

Tengo los times

 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 Parece que tu awk es más rápido. Gracias.

Solutions Collecting From Web of "Manera eficiente de comparar en awk"