提前认识软件开发(22) shell脚本中的文件操作

编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据、向文件追加一行数据等。完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令。

本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考。

一、概述

在某些软件项目的需求文档中,要求程序一次性读或写的数据规模较大,可达1000万行级,这就涉及到对程序执行方法和效率等的考虑。

本文比较了不同shell命令在对文件进行读或写操作过程中执行效率的不同,为大数据下文件操作命令的选择提供了参考。

二、文件比较算法流程介绍

文件比较算法的流程如图1所示。

图1 文件比较算法的流程

三、不同的文件内容读取命令

1. sed逐行读取数据

该命令在一个循环里,依次读取文件的每一行内容。

(1) 读取方法

举例:读取f1文件的第一行:sed –n 1p f1

读取f1文件的第二行:sed –n 2p f1

该命令实现简单,逻辑清晰。

(2) 性能问题

如果用该命令进行大数据量(在十万数量级以上)的读取,发现程序执行效率低下,耗时较多(具体参见第3小节中的原因分析)。

2. 运用exec及read读取文件内容

(1) 打开读文件句柄

exec 3<testfile

其中,3是文件描述符(文件句柄),在linux取大于等于3的值(在aix下只能为[3,9]之间的值),该文描述符后续用来读取一行数据和关闭文件;testfile是要打开的文件。

(2) 读取一行数据

read str<&3

其中,3表示从该文件描述符读取数据;str是变量,用于保存从文件中读取的行数据。

时间: 2025-01-21 13:55:20

提前认识软件开发(22) shell脚本中的文件操作的相关文章

让你提前认识软件开发(22):shell脚本中的文件操作

第1部分 重新认识C语言 shell脚本中的文件操作   [文章摘要]         编写shell脚本时,经常会涉及到对文件的操作,比如从文件中读取一行数据.向文件追加一行数据等.完成文件读写操作的方法有很多,了解各种命令下文件操作的执行情况,有助于开发人员在不同使用场景下选择合适的命令.        本文以实际的shell脚本为例,介绍了对文件进行操作的不同方法,为相关开发工作提供了参考. [关键词]        shell  文件操作  读写  效率   一.概述         在

提前认识软件开发(31) 数据库脚本中的begin与end

在数据库脚本中,begin与end是一对奇怪的单词.缺少它们,某些代码看起来会让人一头雾水:添加它们,代码的结构瞬间就清晰了. 确实,begin与end作为代码语句的开始和结束标志,可以让脚本程序的逻辑明确,易于阅读. begin与end主要用在以下地方: 1. if.else.else if.while等语句中 if.else.else if.while等语句要自占一行,执行语句不得紧跟其后,不论执行语句有多少都要加语句块标志begin-end. 脚本文件中的begin和end应独占一行并且位

提前认识软件开发(30) 数据库脚本中的空行与空格

在数据库脚本中,空行与空格起着"锦上添花"的作用.恰当地使用它们,可以提高代码的规范性及可阅读性,进而提升数据库的编程效率. 1. 空行 空行起着分隔脚本段落的作用,适当的空行可以使脚本的布局更加的清晰.空行的作用有以下几个: (1) 用于分隔两个数据表的创建脚本 示例: create table tb_example1 ( [表内容实现代码] ) go -- 空行 create table tb_example2 ( [表内容实现代码] ) go (2) 用于分割两个存储过程的创建脚

提前认识软件开发(29) 数据库脚本文件的布局

"没有规矩,不成方圆",规范数据库脚本文件的代码布局具有以下重要意义: (1) 可表现出代码良好的逻辑结构,提高代码的准确性.连续性.可读性及可维护性. (2) 有利于提高产品的开发质量和效率,并降低开发成本. (3) 对于开发人员来说,养成良好的脚本编写习惯有助于提高个人的数据库脚本编程水平,进而提高脚本编程效率. 可见,统一的.良好的脚本代码布局和风格不仅仅是个人主观美学或形式上的问题,而且影响到产品的质量,并涉及到自身脚本编程能力的提高. 1. 脚本布局顺序概述 在实际的软件开发

提前认识软件开发(26) 数据库脚本的注释

1. 概述 注释在程序语言的编写中占有非常重要的地位.优美的.得当的注释不仅有助于研发人员理解程序,还能够提高编程效率(进而提高办事效率). 但是,可能是由于工作比较忙的缘故,许多开发人员不重视注释的书写,这也导致了项目交接的时候,其他开发人员理解程序困难,甚至不知道程序到底要做什么事情.因此,良好注释的书写是对一个开发人员的基本要求,大家一定要重视. 对于脚本的注释,建议大家一律采用英文,这样可以体现出国际化.专业性与规范性. 2. 数据库脚本文件头部的注释 很多脚本文件都没有头部的注释,大家

提前认识软件开发(14):程序中的算法

算法(Algorithm),是程序的灵魂.著名计算机科学家.图灵奖获得者沃思曾提出过一个公式:数据结构+算法=程序.可见,算法在程序中占有非常重要的地位. 在实际的软件开发项目中,不管是有意设计或是无意为之,我们几乎随时在和算法打交道.小到定义一个变量,大到编写一个函数,这些都是算法的实现过程. 本文以作者实际项目工作为背景,介绍算法在C程序中的应用. 1.算法概述 什么是算法呢?先来看一看一些计算机书籍中的定义. 经典书籍<算法导论>(Cormen等著,机械工业出版社)中,作者认为算法是一系

提前认识软件开发(28) 数据库存储过程中的重要表信息的保存

1. 存储过程中的重要表信息的保存 在很多存储过程中,会涉及到对表数据的更新.插入或删除等,为了防止修改之后的表数据出现问题,同时方便追踪问题,一般会为一些重要的表建立一个对应的debug表.这个debug表中的字段要包括原表的所有字段,同时要增加操作时间.操作码和操作描述等字段信息. 例如,在某项目中,包括了如下一个重要的表tb_XXX: create table tb_XXX ( AAA varchar(30) not null, -- AAA BBB varchar(30) not nul

如何在shell脚本中判断文件或者文件夹是否存在?

1:查找文件夹 如果文件夹存在,则打印一句存在,否则打印不存在 这里的话可以自由加一些指令. if [ test -d 文件夹名称 ] ; then echo "文件夹存在!" else echo "文件夹不存在!" fi 2:查找文件 如果文件存在,则打印一句存在,否则打印不存在 这里的话也可以自由加一些指令. if [ -f file.txt ]; then echo "文件存在!" else echo "文件不存在!"

提前认识软件开发(1) 序言

序言 正式踏上软件开发岗位已经将近两年了,经历了很多,也学到了很多."万事开头难",学生转变为职业人的过程,恰似茧化成蝶的过程. 1.为什么要写作本系列? 在工作的过程中,我发现我们在学校里面学到的很多东西片面肤浅,根本达不到岗位的要求.像编码规范.研发流程等等学校里几乎不提及的知识,在实际的软件开发项目中却恰恰是异常的重要. 在学校里面,我们欠缺的教育主要包括以下方面: 第一,对编码规范的要求.计算机编程课上,老师只要求学生能够编写程序实现既定的功能即可,几乎不会对编码规范提出要求,