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
 src=/data/workspace/myshixun/src/myText.txt # 文件路径
 #请在此处键入你的代码
 touch /home/result.txt
IFS_old=$IFS
IFS=$'\n'
for line in $(cat $src)
do
    echo $line | wc -w
done
IFS=$IFS_old
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真题OK撒

你的打赏将是我最大的创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值