作为练习,我正在尝试输出每种可能长度的词典中存在多少个单词。 这是我的代码:
$ 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会将换行符算作一个字符,尽管事实并非如此。 有什么解决办法吗?还是我做错了什么?
答案 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