Являюсь новичком AWK, используя утилиты GNU, перенесенные в Windows (UNXUtils) и gawk вместо awk. Решение на этом форуме работает как абсолютная магия, и я пытаюсь найти источник, который я могу прочитать, чтобы лучше понять выражение шаблона, предлагаемое в этом решении.
В Выберите уникальные или различные значения из списка в оболочке UNIX script от Dimitre Radoulov, предлагая следующий код
zsh-4.3.9[t]% awk '!_[$0]++' file
как решение для выбора элементов списка с повторяющимися и перемешанными элементами, перечисляя каждый элемент только один раз.
Я ранее использовал sort | uniq
для этого, который отлично работал для небольших тестовых файлов. По моей фактической проблеме (извлечение списка символов компании из архивных данных о книге заказов из Национальной фондовой биржи Индии в течение 16 дней в апреле 2006 года, с 129 миллионами записей в нескольких файлах), размер сортировки стал слишком большим. И uniq устраняет только смежные дубликаты.
Копируя вышеприведенную строку для моего Win-GNU gawk, я использовал
C:\Users\PAPERS\> cat ..\Full*_Symbols.txt | gawk "!_[$0]++" | wc -l
946
предполагая, что 129 миллионов записей относятся к 946 различным фирмам, что является ОЧЕНЬ разумным ответом. И это заняло менее 5 минут на моей скромной машине Windows, после нескольких часов попыток SORT избаловало меня.
Посмотрел на все тексты awk, которые у меня есть, и немного искал в Интернете, и хотя для части шаблона объяснение, почему это сработало, ясно (!
служит как NOT, $0
- это вся текущая запись), для подчеркивания _
Я не могу найти никаких объяснений и видел ++
в примерах только как "обновить счетчик на 1."
Будем благодарны за любой подходящий текст или веб-ссылку, чтобы полностью понять этот пример, так как я думаю, что это поможет мне и в других связанных случаях. Благодарю. Лучший,