网站搜索

Linux 终端中的乐趣 - 玩转字数和字符数


Linux 命令行本身有很多乐趣,许多繁琐的任务可以非常轻松且完美地执行。我们将在本文中看到如何处理单词和字符、它们在文本文件中的出现频率等。

我们想到的唯一用于调整 Linux 命令行以操作文本文件中的单词和字符的命令是 wc 命令。

代表字数统计的“wc”命令能够从文本文件中打印换行符、字数和字节数。

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

man man > man.txt

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

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

cat man.txt | tr ' '  '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | grep -v '[^a-z]' | sort | uniq -c | sort -rn | head
样本输出
7557 
262 the 
163 to 
112 is 
112 a 
78 of 
78 manual 
76 and 
64 if 
63 be

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

使用以下命令将一个单词分解为单独的单词如何?

echo 'tecmint team' | fold -w1
样本输出
t 
e 
c 
m 
i 
n 
t 
t 
e 
a 
m

注意:这里,“-w1”表示宽度。

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

fold -w1 < man.txt | sort | uniq -c | sort -rn | head
样本输出
8579  
2413 e
1987 a
1875 t
1644 i
1553 n
1522 o
1514 s
1224 r
1021 l

如何以不同的方式获取文本文件中最常见的字符(大写和小写)及其出现频率。

fold -w1 < man.txt | sort | tr '[:lower:]' '[:upper:]' | uniq -c | sort -rn | head -20
样本输出
11636  
2504 E 
2079 A 
2005 T 
1729 I 
1645 N 
1632 S 
1580 o
1269 R 
1055 L 
836 H 
791 P 
766 D 
753 C 
725 M 
690 U 
605 F 
504 G 
352 Y 
344 .

检查上面的输出,其中包含标点符号。让我们使用“tr”命令去掉标点符号。开始了:

fold -w1 < man.txt | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -20
样本输出
  11636  
  2504 E 
  2079 A 
  2005 T 
  1729 I 
  1645 N 
  1632 S 
  1580 O 
  1550 
  1269 R 
  1055 L 
   836 H 
   791 P 
   766 D 
   753 C 
   725 M 
   690 U 
   605 F 
   504 G 
   352 Y

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

cat *.txt | fold -w1 | tr '[:lower:]' '[:upper:]' | sort | tr -d '[:punct:]' | uniq -c | sort -rn | head -8
样本输出
  11636  
   2504 E 
   2079 A 
   2005 T 
   1729 I 
   1645 N 
   1632 S 
   1580 O

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

cat man.txt | tr '' '2' | tr '[:upper:]' '[:lower:]' | tr -d '[:punct:]' | tr -d '[0-9]' | sort | uniq -c | sort -n |  grep -E '..................' | head
样本输出
1        ────────────────────────────────────────── 
1        a all 
1        abc             any or all arguments within   are optional 
1               able  see setlocale for precise details 
1        ab              options delimited by  cannot be used together 
1               achieved by using the less environment variable 
1              a child process returned a nonzero exit status 
1               act as if this option was supplied using the name as a filename 
1               activate local mode  format and display  local  manual  files 
1               acute accent

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

这些简单的脚本,也让我们认识了英语中最常出现的单词和字符。

目前为止就这样了。我将再次在这里带来另一个值得了解的有趣且不寻常的话题,你们一定会喜欢阅读的。不要忘记在下面的评论部分向我们提供您的宝贵反馈。

另请阅读:20 个有趣的 Linux 命令