Welcome

首页 / 软件开发 / 数据结构与算法 / 提前认识软件开发(22) shell脚本中的文件操作

提前认识软件开发(22) shell脚本中的文件操作2015-01-25编写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是变量,用于保存从文件中读取的行数据。