使用 grep 和 wc 获取文件中唯一单词的计数

问题描述 投票:0回答:2

需要命令使用 grep 查找文件中唯一单词的数量

尝试使用 grep 以及 uniq 和 sort,但需要找到一种仅使用 grep 和 wc 命令的方法。这是我能够做到的两种方法,但我需要仅使用 grep ..

$ grep -oE '\w+' 'file.txt' | sort | uniq | wc -l
$ grep -oE '\w+' 'file.txt' > temp.txt && awk '!seen[$0]++' temp.txt | wc -l

输入文件示例:

one two three four five
two four one six
eight three seven five

输出: 独特字数:8

是否可以首先使用 grep -oE '\w+' file.txt 命令提取单词,然后对每个单词执行 grep 到一个空文件中,如果 grep 找不到该单词存在于该文件中,则将该单词附加到该文件中file.这样只有那些在新文件中找不到的单词才会被附加到它吗?可以使用 grep 来做到这一点吗?

shell awk grep uniq wc
2个回答
1
投票

仅仅使用 grep 或 grep+wc 是不可能完成你想要做的事情的。鉴于此,如果您真的只想使用 1 个工具,则使用 GNU awk 进行多字符 RS 并假设一个由空格分隔的“单词”文件作为输入:

$ awk -v RS='\\s+' '{unq[$0]} END{print "unique word count:", length(unq)}' file.txt
unique word count: 8

或使用正则表达式来识别“单词”:

$ awk -v RS='\\w+' 'RT{unq[RT]} END{print "unique word count:", length(unq)}' file.txt
unique word count: 8

1
投票

由于 awk 也被标记,因此一种仅使用(几乎任何)

awk
的方法,返回关联数组的长度,其中索引是单词。

% awk '{for(i=1;i<=NF;i++){A[$i]++}} END{print length(A)}' file
8

测试

  • GNU awk 3.1.8/4.2.1/5.3.0
  • nawk 20221215
  • 原始awk 20121220
  • mawk 20240123
© www.soinside.com 2019 - 2024. All rights reserved.