Linux centos7 统计文本文件中所有单词

统计文本文件中高频词是常见操作(参考文章:Linux centos7 高频词统计)。而查找并统计文本文件中共有多少单词(独立字符串,包括中文或数字串)也是一项很好地实践项目。

本文主要应用命令替换、循环结构、sort、grep及awk命令等达到目标。最后剖析不同方法的差异且且提出使用建议。

bash中如何从文本文件中提取所有单词?主要有四维思路:用grep方法搜索所有单词存入一个变量;for循环遍历所有单词;while循环查找所有单词存入一个数组或打印输出;awk打印所有行之所有字段。

讨论项目主要目标:获取文件中的所有单词(是批独立数字串或英文字符串的简称)。仅存储每个单词一次,且不区分大小写。

本文训练素材:

cat test4.txt

123 222 345

my name is shantong

12345 789

my qq number is 36142959

my email is 36142959@qq.com

my ip is 192.168.1.141

my name is zhange

My telephone num is 13523072436

My qq number is 845537614

Server_name is Softeem

Company Site is http://www.pili-zz.net

MMMM1234

192.168.89.115

一、grep

grep命令可以搜索单词:加参数 –w;或在搜索字符前后加\b;或在搜索字符前加\< 后加\>;

而用对于未知的单词,可以使用posix字符[[:alpha:]],或\w

WORDS=`grep -o -E '\w+' filename | sort -u -f`

grep –o  仅显示匹配内容

grep –E  搜索表达式可用扩展正则

由grep搜索到的单词是所有文本文件的单词,有大量重复的,通过排序、去重,忽略大小写,可以用sort -u –f,达到单词唯一。

sort –u 排序时去掉重复

sort –f 排序时忽略大小写

命令替换格式``与$()效果相同,可以自由选择一种。

WORDS=$(grep -o -E "[[:alpha:]]+" filename|sort -u -f)   仅英语词组

WORDS=`grep -o -E "[[:alnum:]]+" test4.txt | sort -u -f`  包括数字或英文词组

 二、for循环

一个文本文件中,有大量单词,如果需要查找统计这些内容,首先想到的应该是用for循环,从文件中一个一个读取,或打印输出,或重定向到文件中。

for循环是按行循环读取的,不是按单词读取。我们可以把文本作为一个大的变量容器,我们一个一个单词读取,如下所示:

for word in $(<inputfile)

do

    echo "$word" >>outfile

done

echo `cat outfile |sort –u –f`

rm –fr outfile

写成一行代码:

for word in $(<test4.txt); do echo "$word" >>outfile; done;echo `cat outfile |sort -u -f`;rm-fr outfile

先用$(<inputfile)把文件作为一个变量,再进行循环。获取单词太多,需要重定向到一个文件,再排序、去重。中间临时文件可以执行完程序后删除(这是一个好习惯!)

如果不排序、去重,for循环查找到的单词是这样的:

三、while循环

默认情况下,while循环中的read命令是读取整行。因此,解决方案可能是读取整行,然后使用例如for再获得单词:

while read line; do

    for word in $line; do

        echo"word = '$word'"

    done

done <filename

与for循环一样,前面截图是未排序、去重的。

两个循环获取的单词也是一样多,功能相同。

四、awk

awk功能强大之处在于,利用此命令可以获取一行内容,也可以进一步列出行内的单词。可以格式化输出,有条件的输出部分或全部。

不排序去重查询输出文本文件的单词:

awk '{for(i=1; i<=NF; i++){print $i}}' text_file

排序且去重查询输出文本文件的单词:

awk   '{

             for(i=1;i<=NF;i++){

                count[$i]++

            }

        } END {

            for(k in count){

                print k

            }

        }'   test4.txt

写作一行代码:

awk '{for(i=1;i<=NF;i++){words[$i]++}}END{for(j in words){print j}}' test4.txt

加入内置变量RS的不同值,可以获取更详细的单词,不再包括单词与标点符号的组合。

小结

在利用bash命令行获取文本文件的所有单词方面,应用grep法最简单最快速,有重要参考价值。而获取比较理想的效果最好采取awk方法,其可以加入多种不同的分隔符,用于详细分解由不同标点符号或连接符构成的长串字符。

运用循环方法,思路明确,但由于分隔符不易设置,不能有效得到满意结果。即使利用排序、去重等手段,也不能分解如http://www.pili zz.net这样的长字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/49084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 1.21中值得关注的几个变化

美国时间2023年8月8日&#xff0c;Go团队在Go官博上正式发布了1.21版本[2]&#xff01; 早在今年4月末&#xff0c;我就撰写了文章《Go 1.21新特性前瞻[3]》&#xff0c;对Go 1.21可能引入的新特性、新优化和新标准库包做了粗略梳理。 在6月初举办的GopherChina 2023大会上[4]&…

Docker(二) Docker容器

在docker中的容器都是由镜像所创建的&#xff0c;一个镜像可以创建多个容器。 一、调试Docker 启动Docker systemctl start docker 查看Docker中有哪些镜像 docker images 下载镜像 docker pull hello-world 运行镜像 docker run hello-world 出现 Hello from Docker! 这…

Python 从入门到实践第3版(中文版)正式版+编制版+电子版

Python编程&#xff1a;从入门到实践&#xff08;第3版&#xff09; ([美] 埃里克 • 马瑟斯&#xff08;Eric Matthes&#xff09;) 2023 (Z-Library)

java八股文面试[数据结构]——List和Set的区别

List和Set是用来存放集合的接口&#xff0c;并且二者都继承自接接口Collection List 中的元素存放是有序的&#xff0c;可以存放重复的元素&#xff0c;检索效率较高&#xff0c;插入删除效率较低。 Set 没有存放顺序不能存放重复元素检索效率较低&#xff0c;插入删除效率较…

学习笔记230818---对于promise失败状态处理的重要性

问题描述&#xff1a; 在项目中经常会出现如上的问题&#xff0c;这是因为&#xff0c;用promise封装的接口或第三方组件方法&#xff0c;如果只对成功的状态做处理&#xff0c;就会造成页面出错&#xff0c;报error。 解决方法 then()的末尾加上.catch(()>{})对失败的状态…

C++类和对象----封装(观看黑马教程整理的笔记)

1、简介 C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; ​ 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重…&#xff0c;行为有走、跑、跳、吃饭、唱歌… ​ 车也可以作为对象…

线程与进程,你真得理解了吗

线程与进程&#xff0c;你真得理解了吗 1 进程与线程的关系和区别2 并行与并发3 线程共享了进程哪些资源 相信大家面试时一定没少被一个问题刁难&#xff0c;那就是进程和线程的区别是什么&#xff1f;这个问题延申开来并不像表面那么简单&#xff0c;今天就来深入一探。 开始…

无涯教程-PHP - 标量函数声明

在PHP 7中&#xff0c;引入了一个新函数&#xff0c;即标量类型声明。标量类型声明有两个选项- Coercive - 强制性是默认模式。Strict - 严格模式必须明确提示。 可以使用上述模式强制执行以下类型的函数参数- intfloatbooleanstringinterfacesarraycallable 强制模…

【Unity】如何制作小地图

我们为什么要制作小地图呢&#xff1f; 原因很简单&#xff1a; 导航和定位&#xff1a;小地图可以显示玩家当前位置以及周围环境的概览。这使得玩家能够更好地导航和定位自己在游戏中的位置&#xff0c;找到目标或避开障碍物。场景了解&#xff1a;通过小地图&#xff0c;玩…

Windows10上VS2022单步调试FFmpeg 4.2源码

之前在 https://blog.csdn.net/fengbingchun/article/details/103735560 介绍过通过VS2017单步调试FFmpeg源码的方法&#xff0c;这里在Windows10上通过VS2022单步调试FFmpeg 4.2的方法&#xff1a;基于GitHub上ShiftMediaProject/FFmpeg项目&#xff0c;下面对编译过程进行说明…

渗透测试面试题汇总(附答题解析+配套资料)

注&#xff1a;所有的资料都整理成了PDF&#xff0c;面试题和答案将会持续更新&#xff0c;因为无论如何也不可能覆盖所有的面试题。 一、思路流程 1、信息收集 a、服务器的相关信息&#xff08;真实ip&#xff0c;系统类型&#xff0c;版本&#xff0c;开放端口&#xff0c;…

Java免费自学网站墙裂推荐!!!!

最近&#xff0c;常有一些读者问我&#xff1a;“有没有什么推荐的Java学习网站啊&#xff1f;” 因为一直没有时间&#xff0c;所以我之前也是让大家上知乎、搜索引擎搜一下就好了。 但是&#xff0c;我深知不能这样&#xff0c;应该拿出更真诚的态度带来优质的内容。 于是…

轻松搭建远程Node.js服务端,让你的应用在公共网络中畅行无阻!

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

linux安装 MySQL8 并配置开机自启动

目录 1.下载 mysql 安装包 2.上传并解压 mysql 3.修改 mysql 文件夹名 4.创建mysql 用户和用户组 5.数据目录 &#xff08;1&#xff09;创建目录 &#xff08;2&#xff09;赋予权限 6.初始化mysql &#xff08;1&#xff09;配置参数 &#xff08;2&#xff09;配置环…

ChatGPT应用于高职教育的四大潜在风险

目前&#xff0c;ChatGPT还是一种仍未成熟的技术&#xff0c;当其介入高职教育生态后&#xff0c;高职院校师生在享受ChatGPT带来的便利的同时&#xff0c;也应该明白ChatGPT引发的风险也会随之进入高职教育领域&#xff0c;如存在知识信息、伦理意识与学生主体方面的风险与挑战…

爬虫异常处理:异常捕获与容错机制设计

作为一名专业的爬虫程序员&#xff0c;每天使用爬虫IP面对各种异常情况是我们每天都会遇到的事情。 在爬取数据的过程中&#xff0c;我们经常会遇到网络错误、页面结构变化、被反爬虫机制拦截等问题。在这篇文章中&#xff0c;我将和大家分享一些关于如何处理爬虫异常情况的经…

SpringBoot(二)

###SpringBoot原理分析 ###SpringBoot监控 ###SpringBoot项目部署 #SpringBoot自动配置 Condition&#xff1a;&#xff08;条件&#xff09; Condition是在Spring4.0增加的条件判断功能&#xff0c;通过这个功能可以实现选择性的创建Bean操作 SpringBoot是如何知道要创建…

隧道vs免费爬虫ip:为何要选择隧道爬虫ip?

在网络爬虫的世界中&#xff0c;爬虫ip是一项关键技术&#xff0c;它可以帮助我们隐藏身份、突破限制、提高抓取效率。但是&#xff0c;在选择爬虫ip时&#xff0c;我们常常会面对隧道爬虫ip和免费爬虫ip之间的抉择。在本文中&#xff0c;我们将探讨隧道爬虫ip相对于免费爬虫ip…

ROS_LINUX入门学习笔记=2=

B站ros机器人工匠阿杰入门教程 rqt_robot_steering 控制小乌龟 在index ros .rog中查找相关的包&#xff1a;ros_index 下图是rqt_robot_steering的简介 其中可以查看github源码地址 website可以查看效果图 下载相关的包 sudo apt install ros-kinetic-rqt-robot-steering …

会计如何使用ChatGPT提高工作效率

文章目录 ChatGPT改变了会计行业微软重新定义了PC交互应对ChatGPT带来的冲击给财务人员的建议总结 ✍创作者&#xff1a;全栈弄潮儿 &#x1f3e1; 个人主页&#xff1a; 全栈弄潮儿的个人主页 &#x1f3d9;️ 个人社区&#xff0c;欢迎你的加入&#xff1a;全栈弄潮儿的个人社…