awk长度为+1

时间:2018-06-26 13:26:10

标签: bash awk

作为练习,我正在尝试输出每种可能长度的词典中存在多少个单词。 这是我的代码:

$ 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 :(得分:5)

我要冒险。您的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

到目前为止,一切都很好。现在相同,但带有Windows换行符的dico.txt:

$ 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