Эффективный способ сравнения в awk

#!/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) есть что-то вроде HashSet в awk?

Я получил тайминги

 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 быстрее. Благодарю.

One Solution collect form web for “Эффективный способ сравнения в awk”

Я считаю, что это самый эффективный способ сделать это в 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 
  • Маршрутизация трафика на мои маршруты ipv4, кроме адреса 0.0.0.0?
  • Удаление всех изображений, сделанных с помощью конкретной камеры.
  • Монетный двор Linux: сделать «общедоступную интерактивную пусковую установку» только из корня sh?
  • Разница в синтаксисе команды find
  • Найти все файлы и использовать результат в шаблоне поиска grep
  • Цикл, в котором перечислены папки с пробелами
  • 2 последовательных входа в систему ssh
  • Установка плагина gedit на Fedora
  • Как знак двоеточия и знак вопроса доллара объединяются в sh?
  • Shell Script (Bash) для редактирования вывода из команды
  • Файлы инициализации оболочек
  • Linux и Unix - лучшая ОС в мире.