LeetCode上仅有的4道shell题解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: LeetCode上仅有的4道shell题解析

195 第十行


给定一个文本文件 file.txt,请只打印这个文件中的第十行。

示例:

假设 file.txt 有如下内容:

Line 1

Line 2

Line 3

Line 4

Line 5

Line 6

Line 7

Line 8

Line 9

Line 10

你的脚本应当显示第十行:

Line 10

说明:

  1. 如果文件少于十行,你应当输出什么?
  2. 至少有三种不同的解法,请尝试尽可能多的方法来解题。

法一


使用sed打印文件某一行时会使用以下命令,比如打印第二行,

sed -n '2p' file

尝试文件少于十行时,我们先获取文件本身行数,方法如下:

awk 'END{print NR}' file.txt
awk 'END{print NR}' file.txt

00325403eb7a495ebbd27375c9a8219f.png


法二


awk '{if(NR==10){print $0}}' file.txt


关于 awk 脚本,我们需要注意两个关键词 BEGIN 和 END。

BEGIN{ 这里面放的是执行前的语句 }

END {这里面放的是处理完所有的行后要执行的语句 }

{这里面放的是处理每一行时要执行的语句}

NR已经读出的记录数

Linux awk 命令


法三


grep -n "" file.txt | grep -w '10' | cut -d: -f2

Linux grep 命令

Linux tail 命令

grep -nc "" file.txt
grep -c "" file.txt
grep -vc "^$" file.txt
grep -n "" file.txt|awk -F: '{print '}|tail -n1 | cut -d: -f1 //高级高级

6f895c0f5bb942029dd956ae38d8dde6.png

87eaae28a91740acb1dfb6fa3504d5a8.png

最后一行 cut以冒号分开,分为两个域

a72a30881c41457d8525a255c3e8b4b4.png


193 有效电话号码


给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个单行 bash 脚本输出所有有效的电话号码。


你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxxx 或 xxx-xxx-xxxx。(x 表示一个数字)

你也可以假设每行前后没有多余的空格字符。

示例:

假设file.txt内容如下:

987-123-4567

123 456 7890

(123) 456-7890

你的脚本应当输出下列有效的电话号码:

987-123-4567

(123) 456-7890

grep 命令:

-E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。


考察正则表达式:把每一个x换成数字[0-9],再将给小括号加上反斜杠进行转义或者放进一对中括号内即可。需要一个或|就可以将两个正则表达式连在一起。使用或运算连接在一起,你如果觉得还不够简化可以再提取出两个正则中相同的部分。

\d 是基于 Perl 的正则表达式

grep -E '^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$' file.txt
grep -P '^([(]\d{3}[)] |\d{3}-)\d{3}-\d{4}$' file.txt
grep -P '^(\(\d{3}\) |\d{3}-)\d{3}-\d{4}$' file.txt


192 统计词频


写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。

为了简单起见,你可以假设:

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

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

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


示例:

假设 words.txt 内容如下:

the day is sunny the the

the sunny is is

你的脚本应当输出(以词频降序排列):

the 4

is 3

sunny 2

day 1

说明:

  • 不要担心词频相同的单词的排序问题,每个单词出现的频率都是唯一的。
  • 你可以使用一行 Unix pipes 实现吗?
cat Words.txt| tr -s ' ' '\n' | sort | uniq -c | sort -r | awk '{print $2, $1}'

1 切割

tr 命令用于转换或删除文件中的字符

-s:缩减连续重复的字符成指定的单个字符

2.png


2 排序单词

3.png

3 统计单词出现次数

uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。

-c:在每列旁边显示该行重复出现的次数。

4.png

4 排序单词出现次数

-r:以相反的顺序来排序

5.png

5 打印

6.png


194 转置文件


给定一个文件 file.txt,转置它的内容。

你可以假设每行列数相同,并且每个字段由 ’ ’ 分隔。

示例:

假设 file.txt 文件内容如下:

name age

alice 21

ryan 30

应当输出:

name alice ryan

age 21 30

转置只需要把一列元素串起来,保存起来并输出即可。

获取一列元素的方法:

cat file.txt | head -n 1 | wc -w

通过 head -n 命令可以获取文件指定行数的内容,再使用 wc -w 即可获取当前行的所有列数。由于本题每行列数相同,因此我们取第一行即可。

columns=$(cat file.txt | head -n 1 | wc -w)
for i in $(seq 1 $columns)
do
awk  '{print $'$i'}' file.txt | xargs
done
相关文章
|
3月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
4月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
64 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
|
4月前
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
92 0
|
6月前
|
Shell 开发者
Shell 函数深入解析与实践
了解 Shell 函数的基础,包括定义、参数传递及返回值。函数定义有多种语法,如 `function func() {...}` 或 `func() {...}`。参数通过 `$1`, `$2` 等访问,`$@` 代表所有参数。`return` 用于返回退出状态码(0-255),非数值数据需用 `echo`。正确获取函数返回值应立即检查 `$?`,例如:`result=$?`。实践中不断探索和学习!
42 1
|
6月前
|
SQL 算法 大数据
深入解析力扣184题:部门工资最高的员工(子查询与窗口函数详解)
深入解析力扣184题:部门工资最高的员工(子查询与窗口函数详解)
|
6月前
|
SQL 算法 数据挖掘
深入解析力扣183题:从不订购的客户(LEFT JOIN与子查询方法详解)
深入解析力扣183题:从不订购的客户(LEFT JOIN与子查询方法详解)
|
6月前
|
算法
力扣经典150题解析之三十四:有效的数独
力扣经典150题解析之三十四:有效的数独
45 0
|
6月前
|
算法 搜索推荐 测试技术
力扣经典150题解析之二十九:三数之和
力扣经典150题解析之二十九:三数之和
45 0
|
6月前
|
算法 测试技术 程序员
力扣经典150题解析之二十八:盛最多水的容器
力扣经典150题解析之二十八:盛最多水的容器
50 0

推荐镜像

更多