Утечка памяти в Word frequency gawk

Использование dateadd и dategrep из dateutils:

dategrep  -i "%Y/%m/%d %T" ">=$(dateadd now -30d)" 

dateadd вычисляет дату и время от настоящего момента до 30 дней назад. Затем dategrep печатает только строки из стандартного ввода, которые содержат строку даты, более новую или равную (>=), чем эта. В этом случае формат даты строк журнала должен быть указан с помощью -i.

1
26.01.2019, 17:40
1 ответ

Итак, было несколько вещей, которые помогли, но главное, что заставило это работать, - это использование sort | uniq -c вместо gawk, согласно Грегори Нисбету .

Я также использовал комментарий @ dave_thompson_085 о tr -sc '[: alpha:]' '\ n' . Флаг -s объединяет повторы, что означает, что мне не нужно удалять пустые строки, а -c инвертирует набор символов для поиска. Побочный эффект -c заключается в том, что вы можете использовать только один заменяющий символ вместо набора. Также спасибо Дэйву за уловку о grep и точных совпадениях строк ( -x ). Если бы у меня была репутация, чтобы проголосовать за этот комментарий, я бы сделал это.

Наконец, мне пришлось использовать дополнительный код, чтобы удалить объекты XML ( ") и вырезать HTML (избыток ). В getArticleText , новая команда sed выглядит так: | sed -e 's / "/" / g' -e 's / /> / g' -e 's / & / & / g '-e' s /<.*>// g '. Каждое выражение ( -e для цепочки команд) имеет дело с разными объектами HTML. Я попробовал несколько более полных варианты (например, использование perl согласно StackOverflow ), но они не работали в моем случае из-за проблем, связанных с машиной. Окончательный сценарий можно увидеть в моем репозитории wordcount .

Скрипт завершился на моей машине за 3 часа 20 минут, но это еще и 6-ядерный процессор AMD много лет назад с жестким диском. Ваш пробег может отличаться, но для меня этого было достаточно.

Я не буду принимать этот ответ, поэтому что если @Gregory Nisbet или @ dave_thompson_085 захотят опубликовать свой ответ, они смогут.

0
28.01.2020, 01:07

Теги

Похожие вопросы