首页 > 系统相关 >使用 Linux 命令来获取输入文件中特定字符的出现次数

使用 Linux 命令来获取输入文件中特定字符的出现次数

时间:2023-01-25 20:31:38浏览次数:42  
标签:字符 grep 次数 tpoint 命令 Linux wc txt


概述

我们将学习如何使用 Linux 命令来获取输入文件中特定字符的出现次数。

我们假设您知道一些常见的 Linux 命令,包括 grep、awk 和 tr。

我们还假设我们的输入文件 tpoint.txt 包含一些虚拟数据 -


$ cat tpoint.txt
"I Love Tpoint!!!"
"Tpoint is great!!!"


在本教程的其余部分,我们将使用 tpoint.txt 进行演示。

使用 grep 命令

grep 命令在输入文件中查找特定字符串。

现在,我们将查看获取文件中字符数的命令 -


$ grep -o 'e' tpoint.txt | wc -l
4


我们正在搜索文件 tpoint.txt 中字母“e”的出现。−o 选项以不同的行显示匹配的部分。

我们现在使用 “|” 符号将 grep 程序的输出连接到 wc 程序的输入。'wc' 命令中的 −l 选项告诉我们给定文件中有多少行。

不区分大小写的搜索

grep 命令允许使用 -i 选项执行不区分大小写的搜索。

$ grep -o -i 'l' tpoint.txt | wc -l
3

使用多个输入文件

您可以使用 grep 命令一次检查多个输入。例如,如果你想知道文本文件中每一行有多长,你可以运行以下命令 -


$ cat > dummy.txt
This is dummy text.
$ grep -o -i 'e' tpoint.txt dummy.txt | wc -l
5


我们添加了一个名为 dommy 的新文件.txt并对该文件(已从 tpoint.text 重命名)和 dommmy.txt 执行字符计数。

我们使用 grep 命令来计算每个文件中的字符数。结果包括两个文件中的字符总数。

使用 tr 命令

tr 是用于执行基于字符的转换的工具。

我们可以组合两个选项,−c 和 −d,以获得字符数 -


$ tr -c -d 'l' < tpoint.txt | wc -c
2


让我们首先了解上述命令中使用的选项。

  • −c − 此选项将接受集合的补充
  • −d − 它将删除集合中提到的所有字符

字符串定义为字符序列。在我们的示例中,字符串只是一个字母 l。

当我们将 −c 和 −d 选项组合在一起时,它将删除除 −d 选项指定的字符之外的所有内容。

生成的字符串将使用管道符号 (|) 通过管道传递到 wc 命令中。wc 命令中的 −c 选项将返回字符总数。

不区分大小写的搜索

您可以通过将大写和小写添加到集合中来使用大写或小写来执行搜索。


$ tr -cd 'lL' < tpoint.txt | wc -c
3


使用 awk 命令

Awk是一个用于处理文本文件的编程工具。它从输入文件中读取行,对每行执行一些操作,然后将修改后的行写回另一个文件。

与我们目前讨论的两种方法不同,这种方法有点难以理解。

让我们看一下该命令,看看它是如何工作的。


$ awk -F 'e' '{s+=(NF-1)} END {print s}' tpoint.txt
4


awk 命令行工具使用的默认字符是空格。但是在这里,我们使用 -F 命令行参数将默认字段分隔符替换为 e。我们希望将数据分成两列,用于“e”的每个实例。

要获得每行的字符数,我们需要将每行的长度相加,然后除以总行数。我们可以使用以下代码来实现这一点 - 我们将每个单词的计数相加,最后,我们得到整个文档的整体字符出现计数。

性能比较

到目前为止,我们讨论的所有三种方法都通过执行相同的基本任务来运行。但是,它们之间的区别在于它们对数据处理的实现。

对于小字符串或小文件,这些命令的执行时间几乎相同。但是,它们之间的真正区别在于它们的文件大小太大。

让我们在一个 1.1 GB 的文件上运行所有这三个命令行,看看哪一个花费的时间更少。


$ ls -lah large.txt
-rw-r--r--. 1 root root 1.1G Jun 12 10:53 large.txt

$ time grep -o 'e' large.txt | wc -l
82256735

real 0m40.733s
user 0m39.649s
sys 0m0.714s

$ time tr -c -d 'e' < large.txt | wc -c
82256735

real 0m2.542s
user 0m1.892s
sys 0m0.433s

$ time awk -Fe '{s+=(NF-1)} END {print s}' large.txt
82256735

real 0m11.080s
user 0m9.589s
sys 0m0.933s


tr 命令是三个命令中最快的,用于计算大文件中的字符数。

结论

我们已经了解了在文本文档中查找字符数的不同方法。我们已经讨论了一些特殊情况,例如不敏感大小写搜索和从多个输入文件中搜索。

我们发现 tr 命令的运行速度比 awk 或 grep 命令快。

标签:字符,grep,次数,tpoint,命令,Linux,wc,txt
From: https://blog.51cto.com/10zhancom/6022861

相关文章

  • 基于EasyX和Raylib的字符雨
    思路按如下顺序尝试:绘制一个字符下落绘制4个字符(一列)的下落绘制20个字符(一列)的下落,并封装其位置更新、绘制的过程为Rain类的成员函数绘制多个雨滴每个雨滴在更新......
  • linux 安装mysql
    1下载mysqlwgethttps://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.41-linux-glibc2.12-x86_64.tar.gz2groupaddmysql添加用户组useradd-r-gmysql......
  • Unix\Linux多线程复健(二)线程同步
    线程同步并非让线程并行,而是有先后的顺序执行,当有一个线程对内存操作时,其他线程不可以对这个内存地址操作线程之间的分工合作线程的优势之一:能够通过全局变量共享信息......
  • Intel baytrail-t support Linux?
    ​​点击这里查看文章​​有空试试~~~唉。。。Ubuntu(Linux)onAtomZ3700SeriesASUSTransformerBookT100isparticularlyinterestingplatform,because​​somegu......
  • linux基础1
    目录linux基础1本周内容概要今日内容概要今日内容详细linux常见岗位计算机的种类服务器的品牌服务器内部组成服务器磁盘阵列linux发展史虚拟化技术虚拟化软件下载重要名词......
  • 注意啦!10 个你需要了解的 Linux 网络和监控命令
    注意啦!10个你需要了解的Linux网络和监控命令 Linux系统技术交流QQ群(3065196)验证问题答案:刘遄导读下面列出来的10个基础的每个Linux用户都应该知道的网络......
  • Linux getopt 命令
    Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与......
  • lazarus 编译为Linux gtk2的应用使用TDateTimePIcker日历在tkDate模式日历下拉菜单不
    网友<安全生产监管>发现lazarus编译为Linux gtk2的应用使用TDateTimePIcker日历在tkDate模式,日历下拉菜单不响应鼠标点击,这个问题在windows和linuxqt下没问题。环境:1、L......
  • win10 sshfs 挂载linux文件夹
    ​​welcometomyblog​​在linux服务器跑实验后,需要把实验结果提交到指定的网址上,此时还得把文件传回win10,然后再上传,感觉太繁琐了,去谷歌上找了直接挂载linux......
  • C++Day09 深拷贝、写时复制(cow)、短字符串优化
    一、std::string的底层实现1、深拷贝1classString{2public:3String(constString&rhs):m_pstr(newchar[strlen(rhs)+1]()){4}5private:6cha......