2

У меня есть файл 400 мегабайт. Файл представляет собой список слов, каждое слово в одной строке. Конец строк представляет собой смесь cr/lf и lf. Некоторые слова являются Unicode.

Я бы предпочел ответы для Linux или Windows, пожалуйста. Я счастлив установить программное обеспечение, но я бы предпочел открытый исходный код.

Мне нужно удалить все слова длиной менее 8 символов. Затем мне нужно дублировать список. (Сортировка списка - это хорошо, но не нужно, если это не часть процесса.) Меня не волнуют слова Unicode - они могут остаться или уйти. Удалять их в порядке.

Чтобы удалить все слова длиной не более 7 символов, я использую awk:

awk "length($0) > 7" wordlist.txt > mynewwordlist.txt

(Это Windows, извините за "вместо")

Затем я пытаюсь использовать сортировку, потому что затем я могу снова использовать awk для дедупликации строк. Сортировать не понравился список слов. Я думаю (но я не уверен), что юникод сломал его.

Итак, как мне обмануть список слов? Или как мне отсортировать список слов, чтобы я мог использовать awk для дедупликации?

2 ответа2

6

Для дедупликации вам нужно sort -u - он будет выводить только уникальные строки. Это опция, указанная в POSIX, так что вы, вероятно, найдете ее в любой системе.

sort -u wordlist.txt | awk 'length($0) > 7'

Используйте двойные кавычки для awk если вы используете Windows. Обратите внимание, что шаг сортировки не является обязательным, так как uniq требует, чтобы повторяющиеся строки были смежными для их удаления.

Если у вас есть проблемы с Unicode, это может быть проблемой вашей локали. Вы можете установить LC_ALL=C для принудительного сравнения собственного значения байта - фактический порядок сортировки для вас все равно не имеет значения. Или, вы можете использовать iconv для преобразования файла из Unicode в другую кодировку, если это проблема.

3

Если кому-то нужно сделать это, не имея доступа к awk , вы также можете использовать grep для выбора слов как минимум заданной длины:

sort -u   wordlist.txt | grep '........'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .