Linux 命令行本身有很多乐趣,许多繁琐的任务可以很容易完美地执行。我们将在本文中玩转单词和字符数,以及它们在文本文件中的频率等。

为了统计以操作文本文件中的单词和字符,我们想到的唯一命令就是wc命令。

在Linux和类似Unix的操作系统上,wc命令允许您计算每个指定文件或标准输入的行数,单词数,字符数和字节数,并打印结果。

要使用小脚本来分析文本文件,我们必须有一个文本文件。为了保持一致性,我们创建了一个带有 man 命令输出的文本文件,如下所述。

linuxmi@linuxmi:~/www.linuxmi.com$ man man > linuxmi.com.txt

上面的命令创建了一个文本文件“ linuxmi.com.txt ”,其中包含“man”命令的“手册页”的内容。

我们想通过运行以下脚本来检查上面创建的“文本文件”中最常见的单词。

linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.com.txt | tr ‘ ‘ ‘\012’ | tr ‘[:upper:]’ ‘[:lower:]’ | tr -d ‘[:punct:]’ | grep -v ‘[^a-z]’ | sort | uniq -c | sort -rn | head

输出如下:

5773
90 the
53 man
50 to
31 is
30 of
29 manual
27 a
25 and
23 in

上面的一个简单脚本显示了文本文件中十个最频繁出现的单词及其出现频率。

如何查看单个的字词呢?那就使用以下的命令吧。

linuxmi@linuxmi:~/www.linuxmi.com$ echo ‘www.linuxmi.com’ | fold -w1

输出如下:

w
w
w
.
l
i
n
u
x
m
i
.
c
o
m

注意:这里的 ‘-w1’ 是设定了长度。

现在我们将分解文本文件中的每个单词,对结果进行排序,并以十个最常用字符的频率获得所需的输出。

linuxmi@linuxmi:~/www.linuxmi.com$ fold -w1 < linuxmi.com.txt | sort | uniq -c | sort -rn | head

输出如下:

13300 �
7384
769 e
753 a
665 t
591 n
558 o
550 i
482 s
425 r

如何区分大小写以及它们的出现频率呢?之前我们都是忽略大小写的。所以,用如下命令。

linuxmi@linuxmi:~/www.linuxmi.com$ fold -w1 < linuxmi.com.txt | sort | tr ‘[:lower:]’ ‘[:upper:]’ | uniq -c | sort -rn | head -20

输出如下:

13300 �
7384
825 E
819 A
734 T
655 N
586 O
573 I
539 S
452 R
385 L
346 M
305 P
299 F
293 H
267 C
258 D
242 –
214 U
209 G

检查上面的输出,如果是英文版本,其中包含了标点符号 . 让我们用’ tr ‘命令去掉标点符号。命令如下:

linuxmi@linuxmi:~/www.linuxmi.com$ fold -w1 < linuxmi.com.txt | tr ‘[:lower:]’ ‘[:upper:]’ | sort | tr -d ‘[:punct:]’ | uniq -c | sort -rn | head -20

现在我有三个文本文件,让我们运行上面的一行脚本来查看输出。

linuxmi@linuxmi:~/www.linuxmi.com$ cat *.txt | fold -w1 | tr ‘[:lower:]’ ‘[:upper:]’ | sort | tr -d ‘[:punct:]’ | uniq -c | sort -rn | head -8

输出如下:

26600 �
14768
1988
1650 E
1638 A
1468 T
1310 N
1172 O

接下来,我们将生成那些至少有十个字母长的不常见字母。以下是简单的脚本。

linuxmi@linuxmi:~/www.linuxmi.com$ cat linuxmi.com.txt | tr ” ‘\012’ | tr ‘[:upper:]’ ‘[:lower:]’ | tr -d ‘[:punct:]’ | tr -d ‘[0-9]’ | sort | uniq -c | sort -n | grep -E ‘………………’ | head

输出如下:

注意:上面脚本中的点(.)越来越多,直到生成所有结果。我们可以使用 .{10} 来获得十个字符匹配。

这些简单的脚本,也让我们知道了英语中出现频率最高的单词和字符。

就这样了。如果还有什么疑问与建议,请在评论部分留言。

发表评论