我一直在阅读Linux的食谱,以了解它。我对它很新。
我浏览了一个名为Concordance of text的主题。现在我明白了它是什么,但是我无法使用tr,sort和uniq(这就是食谱所说的)获得一系列命令来产生一致性。
有人可以告诉我如何创建基本一致性吗?即,仅为每个唯一字排序和显示字频率。
在cookbook中提出的想法是使用tr将所有空格转换为换行符,以便每个单词进入一个新行,然后传递给分类器,然后传递给带有-c标志的uniq独特术语的计数。
虽然我无法找出正确的参数。在解释每个参数的作用时,有人可以解释一下吗?
我已经搜索过了,但我无法得到明确定义的问题答案。
非常感谢任何帮助!
答案 0 :(得分:1)
有很多方法可以做到这一点,但这是我的解决方案。它使用的命令与你提到的不同,但是,通过使用sed
和最终的排序,它可以产生更理想的输出。
find . -type f -print0 | xargs -0 cat | sed 's/[[:punct:]]//g' | sed -r 's/\s+/\n/g' | sort | uniq -c | sort -n
find . -type f -print0
将递归搜索当前目录中的所有文件夹和文件。 -type f
只会返回文件。 -print0
将使用特殊的\0
字符来结束文件名,以便空格不会与管道中的下一个命令混淆。
xargs
接受输入并将其转换为命令的参数,在本例中为cat
。 cat
将打印作为参数提供给它的所有文件的内容。 -0
告诉xargs它的输入是由特殊的\0
字符分隔的,而不是由空格分隔。
sed
是模式匹配的流编辑器。第一个sed
命令使用s
模式替换所有标点符号([[:punct:]]
),并将标点符号替换为空。它匹配给它的每一行中的所有这些模式(g
)。
第二个sed命令通过输入字符串(\s+
)将一行(\n
)中的1个或多个空格的所有实例转换为换行符(g
)。
sort
按字母顺序组织单词。
uniq -c
消除了输出列表中的相邻重复项,同时计算了它们的数量。
sort -n
以数字方式对此输出进行排序,产生按字频排序的单词列表。
sed
和xargs
是非常强大的命令,尤其是在结合使用时。但是,正如另一张海报所指出的,find
也几乎肆无忌惮。 tr
很有用,但比sed
更具体。
答案 1 :(得分:0)
tr ' ' '\n' <input | sort | uniq -c
如果我正确理解您的评论,您需要目录中所有文件的所有单词的总和。你可以这样做:
find mydir -type f -exec cat {} + | tr ' ' '\n' | sort | uniq -c
find
会递归搜索mydir
找到与其参数匹配的文件:-type f
告诉它只保留普通文件(而不是目录或其他几种你不应该拥有的文件) (担心),然后find
将执行cat
,将所有文件名作为参数; cat
连接文件,打印所有内容,就好像它是一个大文件一样。然后,该输出会通过相同的tr
/ sort
/ uniq
管道来实际计算一致性。