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 Perl
ecs服务器shell常用脚本练习(二)
【4月更文挑战第1天】shell代码训练(二)
102 1
|
21天前
|
Java Shell
SpringBoot启动脚本Shell
SpringBoot启动脚本Shell
16 0
|
1天前
|
运维 监控 Shell
利用Shell脚本编写局域网监控软件:实时监测主机连接情况
本文介绍了如何使用Shell脚本创建一个局域网监控工具,以实时检查主机连接状态。脚本包括扫描IP地址范围检测主机可达性及使用`netstat`监控ESTABLISHED连接。此外,还展示了如何每60秒将连接数数据自动提交到指定网站API,以便实时跟踪网络活动。这个自动化监控系统有助于提升网络安全性和故障排查效率。
6 0
|
2天前
|
监控 Shell 开发工具
Shell编程
Shell编程
|
2天前
|
Shell
Shell脚本之流程控制语句
Shell脚本之流程控制语句
|
3天前
|
JSON 运维 监控
训练shell常用脚本练习(三)
【4月更文挑战第14天】shell代码训练(三)
14 1
|
7天前
|
存储 弹性计算 Shell
ecs服务器shell常用脚本练习(十)
【4月更文挑战第11天】shell代码训练(十)
137 0
|
7天前
|
弹性计算 Shell Go
ecs服务器shell常用脚本练习(九)
【4月更文挑战第10天】shell代码训练(八)
124 0
|
18天前
|
Shell
【shell】实时查看网卡流量脚本
【shell】实时查看网卡流量脚本
|
22天前
|
存储 Java Shell
bigdata-04-shell编程基础
bigdata-04-shell编程基础
10 0