Shell脚本编程实践——第4关:编写一个脚本,计算txt文件中每一行单词的个数并将结果写入另一个文件

简介: Shell脚本编程实践——第4关:编写一个脚本,计算txt文件中每一行单词的个数并将结果写入另一个文件

任务描述

本关任务:使用Shell编程读取给定目录下的myText.txt文件,按行计算每行字符的个数并将计算结果输出到/home目录下的result.txt文件中,该文件需要您自行创建。


相关知识

为了完成本关任务,你需要掌握:1.如何使用Shell读取文件内容;如何使用Shell创建文件并写入内容。


Shell 读取文件内容

  • 方法一:重定向while read myline # 逐行读取文件
  1. `do``
  2. `` echo $myline`
  3. done < myText.txt`


重定向是指将用户在终端输入的命令执行的结果输出到指定文件,而不是在终端展示;或将文件中的内容代替键盘输入提交给指定的命令执行。重定向命令包含:

命令 说明
command > file 将输出重定向到file
command < file 将输入重定向到file
command >> file 将输出以追加方式重定向到file
n > file 将文件描述符为n的文件重定向到file
n >> file 将文件描述符为 n 的文件以追加的方式重定向到 file


方法二:管道

  1. cat myText.txt | while read line
  2. do
  3. echo $line
  4. done

cat(英文:concatenate)命令用于连接文件并将文件内容打印到标准输出设备上。语法格式如下: cat [-参数] [--help] [--version] fileName

参数 说明
-n 从1开始对所有输出的行数编号
-b 和-n类似,但空白行不编号
-s 当遇到连续2行以上的空白行时展示1行空白行
-E 每行结尾处显示$符号
-T 将Tab字符显示为^


实例:

cat -n textfile1 > textfile2 # 将textfile1的内容加上行号后输入到textfile2这个文档里
cat -b textfile1 textfile2 >> textfile3 # 将 textfile1和textfile2的内容加上行号后追加输入到textfile3这个文档里
cat /dev/null > /home/test.txt # 清空/home/test.txt 文档的内容


管道命令(使用|符号表示)能够把一个进程的输出数据连接到另一个进程的输入,使用格式如下: command1 | command2 实例:

ls | grep myText.txt # 将ls的输出发送到grep命令,即查看文件myText.txt是否存在于当前目录


  • 方法三:通过cat + IFS重定义 IFS_old=$IFS
  1. IFS=$'\n'
  2. ``for line in $(cat myText.txt)`
  3. do
  4. echo $line
  5. done
  6. IFS=$IFS_old


默认情况下,Bash Shell将空格、制表符、换行符看作是字段分隔符,遇到这些字符Bash Shell就会认为这些字符后是一个新的字段。IFS是Shell的环境变量,它定义了当前的分隔符,通过改变IFS的值可以改变分隔符。


Shell 创建文件的方法

  • 方法一:通过vim命令创建
    vim test.txt
    vim命令可以用vim编辑器直接打开一个已经存在的文件进行编辑,若文件不存在则先创建一个缓存文件,随后用户可以在vim编辑器进行编辑。
  • 方法二:通过echo命令创建文件
    echo "Hello,openEuler!" > myText.txt
    以上命令可以将echo输出的内容重定向至指定文件。
  • 方法三:通过touch命令创建文件
    touch myText.txt
    touch命令创建的是一个空文件。


Shell 写文件

  • 方法一:vim命令
    vim myText.txt
    与创建文件的方法一类似,vim命令可以使用编辑器打开文件,用户输入i后即可键入文件内容,编辑完成后按下Esc键并输入:wq,回车即可保存并退出编辑器。
  • 方法二:重定向
    echo "Hello,openEuler!" > myText.txt
    与创建文件的方法二类似,可以使用echo+重定向的方式向文件中写入内容。重定向>符号写入文件是以覆盖的方式写入,若想实现追加写入,则可以将>改为>>


编程要求

根据提示,在右侧编辑器补充代码,计算每行出现数字的个数并将结果输出到/home/result.txt文件中。


测试说明

平台会对你编写的代码进行测试:

假设myText.txt内容如下:

  1. abc defg# 2
  2. h i jklm # 3
  3. no # 1
  4. p qrst # 2
  5. u v w syz # 4


那么写入的result.txt文件内容应为:

  1. 2
  2. 3
  3. 1
  4. 2
  5. 4


开始你的任务吧,祝你成功!

#!/bin/bash
touch /home/result.txt
sum=0
f1=0
f2=1
#-e 开启echo的转义功能,尾部加\c表示不换行
echo -e "$f1+$f2\c"
#使用expr执行加法
sum=`expr $sum + $f1 + $f2`
#shell脚本中的for循环
for i in $(seq 3 10)
do
    f3=`expr $f1 + $f2`
    sum=`expr $sum + $f3`
    f1=$f2
    f2=$f3
    echo -e "+$f3\c"
done
echo -e "=$sum"
目录
相关文章
|
18天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
42 2
6种方法打造出色的Shell脚本
|
5天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
14 1
|
9天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
24 2
|
23天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
20天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
shell脚本编程基础
shell脚本编程基础
|
存储 Shell Linux
shell脚本编程之基础
shell脚本编程之基础
140 0
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1