Answers:
$ tr ' ' '\n' < FILE | grep WORD | wc -l
其中tr
用换行符替换空格,grep
过滤所有与WORD匹配的结果行,wc
并对剩余的行进行计数。
甚至可以wc
使用-c
grep选项保存零件:
$ tr ' ' '\n' < FILE | grep -c WORD
该-c
选项由POSIX定义。
如果不能保证单词之间有空格,则必须使用其他字符(作为定界符)进行替换。例如替代tr
零件是
tr '"' '\n'
要么
tr "'" '\n'
如果要替换双引号或单引号。当然,您也可以使用tr
一次替换多个字符(考虑不同种类的空格和标点符号)。
如果您需要计算WORD但不计算前缀WORD,WORD后缀或前缀WORD后缀,则可以将WORD模式包含在行首/行尾标记中:
grep -c '^WORD$'
在我们的上下文中,这等效于单词开头/结尾标记:
grep -c '\<WORD\>'
tr
完成此任务的命令,而不是提出在所有情况下都不会起作用的示例。它还将匹配包含您要查找的单词的单词。该grep -o '\<WORD\>' | wc -l
解决方案优越得多。
使用GNU grep,可以使用: grep -o '\<WORD\>' | wc -l
-o
在单独的一行上打印每行的每个匹配部分。
\<
断言一个单词的开头和\>
断言一个单词的结尾(类似于Perl的\b
),因此可以确保您不匹配单词中间的字符串。
例如,
$ python -c'导入此'| grep'\ <一个\>' 应该有一种 -最好只有一种-显而易见的方法。 命名空间是一个很棒的主意-让我们做更多这些吧! $ python -c'导入此'| grep的-o '\ <一个\>' 一个 一个 一个 $蟒蛇-c '导入此' | grep -o'\ <一个\>'| wc -l 3
grep -wo WORD | wc -l
grep
在这里有一个错误。这不是从POSIX清除合并的语义什么-c
和-o
应如此,这是目前不便于携带。感谢您的评论;我已经更新了这个答案。
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl
该命令进行以下操作:
例如,如果我想分析第一条Linus Torvald消息:
寄件人:torvalds@klaava.Helsinki.FI(Linus Benedict Torvalds)新闻组:comp.os.minix主题:minix您最想看到什么?摘要:我的新操作系统的小型民意调查Message-ID:<1991Aug25.205708.9541@klaava.Helsinki.FI>日期:91 Aug 8 20:57:08 GMT组织:赫尔辛基大学
大家好,您都在使用minix –
我正在为386(486)AT克隆做一个(免费)操作系统(只是一个业余爱好,不会像gnu这样大而专业)。自四月以来一直在酝酿之中,并且已经开始准备。我希望得到人们对minix中喜欢/不喜欢的东西的任何反馈,因为我的操作系统在某种程度上类似于它(文件系统的物理布局(由于实际原因))。
我目前已经移植了bash(1.08)和gcc(1.40),而且一切似乎正常。这意味着我将在几个月内得到一些实用的信息,并且我想知道大多数人想要的功能。欢迎任何建议,但我不能保证会实施它们。
莱纳斯(torvalds@kruuna.helsinki.fi)
PS。是的-它没有任何minix代码,并且具有多线程fs。它不是很稳定(使用386任务切换等),它可能永远不会支持AT硬盘以外的任何其他功能,因为这就是我拥有的全部:-(。
我创建一个名为linus.txt的文件,粘贴内容,然后在控制台中编写:
sed -e 's/[^[:alpha:]]/ /g' linus.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl
输出将是:
1 7 i
2 5 to
3 5 like
4 5 it
5 5 and
6 4 minix
7 4 a
8 3 torvalds
9 3 of
10 3 helsinki
11 3 fi
12 3 any
13 2 would
14 2 won
15 2 what
16 ...
如果只想显示前20个字:
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | head -n 20
是要注意重要的命令TR“AZ”“A-Z”确实不能支持UTF-8 还没有,所以在外语单词滑雪后会被翻译成阅。
如果只想搜索一个单词的出现,则可以在末尾添加grep:
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | grep "\sword_to_search_for$"
在名为search_freq的脚本中:
#!/bin/bash
sed -e 's/[^[:alpha:]]/ /g' text_to_analize.txt | tr '\n' " " | tr -s " " | tr " " '\n'| tr 'A-Z' 'a-z' | sort | uniq -c | sort -nr | nl | grep "\s$1$"
该脚本必须调用:
search_freq word_to_search_for
sed: -e expression #2, char 7: unterminated
s'command`,这也算所有单词,对不对?但是OP仅询问了一个特定的对象。还有一点解释会很好。
根据您是想匹配键中还是JSON数据值中的单词,您可能只想从数据中提取键或值。否则,如果某些单词同时作为键和值出现,那么您可能会数很多次单词。
要提取所有密钥:
jq -r '..|objects|keys[]' <file.json
这将递归地测试当前事物是否是对象,如果存在,它将提取键。输出将是键列表,每行一个。
要提取所有值:
jq -r '..|scalars' <file.json
这以相似的方式工作,但是步骤较少。
然后,您可以通过管道传递上述内容的输出grep -c 'PATTERN'
(以使某些模式与键或值grep -c -w -F 'WORD'
匹配),或(与键或值中的单词匹配),或grep -c -x -F 'WORD'
(以匹配完整的键或值),或类似方式,通过做你的计数。
我有这样的json:"number":"OK","number":OK"
在一行中重复多次。
我简单的“确定”计数器:
sed "s|,|\n|g" response | grep -c OK
我已经使用下面的awk命令来查找出现的次数
示例文件
猫文件1
praveen ajay
praveen
ajay monkey praveen
praveen boy praveen
命令:
awk '{print gsub("praveen",$0)}' file1 | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'
输出
awk '{print gsub("praveen",$0)}' file1 | awk 'BEGIN{sum=0}{sum=sum+$1}END{print sum}'
5
awk '{sum+=gsub("praveen","")} END {print sum+0}'
。
{ "key": "the key" }
应在JSON数据的键和值中都匹配,即是否应该对字符串进行key
一次或两次计数。