LeetCode上四道shell编程题解析

本文解析了LeetCode上的四道shell编程题,包括统计文本文件单词频率、筛选有效电话号码、文件内容转置和打印特定行。涉及awk、xargs、sort、uniq、grep、cut等shell命令的使用。
摘要由CSDN通过智能技术生成

LeetCode 192

01 题目描述

写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。为了简单起见,你可以假设:

1. words.txt只包括小写字母和 ' ' 。 

2. 每个单词只由小写字母组成。 

3. 单词间由一个或多个空格字符分隔。

 

02(words.txt)文件内容

the day is sunny the the
the sunny is is

 

03 输出(以词频降序排列):

the 4

is 3

sunny 2

day 1

04 解析

对于words.txt文件进行词频统计,首先要做的事情就是把words.txt文件当中的每一个单词分割出来,分割出每一个单词可以使用以下两种方式:

使用awk命令:

[root@localhost ~]# awk '{for(i=1;i<=NF;i++){print $i}}' words.txt 
the
day
is
sunny
the
the
the
sunny
is
is

其中NF表示当前记录的字段数(即列数)

$i 文件中每行以间隔符号分割的不同字段

如果对awk命令不熟悉,可以参考之前分享的一篇文章学习:

号称三剑客之首的awk,开始秀!

使用xargs命令:

[root@localhost ~]# cat words.txt | xargs -n1
the
day
is
sunny
the
the
the
sunny
is
is
[root@localhost ~]# cat words.txt | xargs -n2
the day
is sunny
the the
the sunny
is is

xargs命令是用于给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。

-n选项,指定 输出时每行输出的列数

 

当我们将words.txt文件中的所有单词都分割出来之后,就可以统计这些单词当中每一个单词出现的次数了。

我们仅考虑使用awk命令来完成这个任务的话很简单,在进行分割的过程中直接用一个关联数组直接保存每一个单词出现的次数,关于关联数组的更多内容可以阅读:SHELL编程之变量与四则运算,此处我们可以暂时将关联数组理解为一个字典,关键字为单词,值为单词出现的次数(这样理解只是一种通俗的说法)

[root@localhost ~]# awk '{for(i=1;i<=NF;i++){a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值