文本的一致性

时间:2012-01-29 21:10:20

标签: linux tr

我一直在阅读Linux的食谱,以了解它。我对它很新。

我浏览了一个名为Concordance of text的主题。现在我明白了它是什么,但是我无法使用tr,sort和uniq(这就是食谱所说的)获得一系列命令来产生一致性。

有人可以告诉我如何创建基本一致性吗?即,仅为每个唯一字排序和显示字频率。

在cookbook中提出的想法是使用tr将所有空格转换为换行符,以便每个单词进入一个新行,然后传递给分类器,然后传递给带有-c标志的uniq独特术语的计数。

虽然我无法找出正确的参数。在解释每个参数的作用时,有人可以解释一下吗?

我已经搜索过了,但我无法得到明确定义的问题答案。

非常感谢任何帮助!

2 个答案:

答案 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接受输入并将其转换为命令的参数,在本例中为catcat将打印作为参数提供给它的所有文件的内容。 -0告诉xargs它的输入是由特殊的\0字符分隔的,而不是由空格分隔。

sed是模式匹配的流编辑器。第一个sed命令使用s模式替换所有标点符号([[:punct:]]),并将标点符号替换为空。它匹配给它的每一行中的所有这些模式(g)。

第二个sed命令通过输入字符串(\s+)将一行(\n)中的1个或多个空格的所有实例转换为换行符(g)。

sort按字母顺序组织单词。

uniq -c消除了输出列表中的相邻重复项,同时计算了它们的数量。

sort -n以数字方式对此输出进行排序,产生按字频排序的单词列表。

sedxargs是非常强大的命令,尤其是在结合使用时。但是,正如另一张海报所指出的,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管道来实际计算一致性。