длина awk считается +1 - PullRequest
       7

длина awk считается +1

0 голосов
/ 26 июня 2018

В качестве упражнения я пытаюсь вывести, сколько слов существует в словаре для каждой возможной длины. Вот мой код:

$ awk '{print length}' dico.txt | sort -nr | uniq -c

Вот вывод:

...
1799 5
427 4
81 3
1 2

Моя проблема в том, что длина awk рассчитывает еще одну букву для каждого слова в моем файле. Правильный вывод должен был быть:

1799 4
427 3
81 2
1 1

Я проверил свой файл, и после слова:

он не содержит пробелов.
ABAISSA
ABAISSABLE
ABAISSABLES
ABAISSAI
...

Так что я думаю, что awk считает символ новой строки символом, несмотря на то, что это не предполагается. Есть ли решение? Или я что-то не так делаю?

1 Ответ

0 голосов
/ 26 июня 2018

Я рискну догадаться. Разве ваш awk не ожидает перевода строки в стиле "U * X" (LF), но ваш dico.txt имеет стиль Windows (CR + LF). Это легко даст вам +1 на всех длинах.


Я взял твои четыре слова:

$ cat dico.txt 
ABAISSA
ABAISSABLE
ABAISSABLES
ABAISSAI

И провел свою линию:

$ awk '{print length}' dico.txt | sort -nr | uniq -c
      1 11
      1 10
      1 8
      1 7

Пока все хорошо. Теперь то же самое, но dico.txt с символами новой строки Windows:

$ cat dico.txt  | todos > dico_win.txt 
$ awk '{print length}' dico_win.txt | sort -nr | uniq -c
      1 12
      1 11
      1 9
      1 8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...