精通awk系列(3):铺垫知识:读取文件的几种方式
回到:
读取文件的几种方式
读取文件有如下几种常见的方式:

下面使用Shell的read命令来演示前4种读取文件的方式(第五种按字节数读取的方式read不支持)。
按字符数量读取
read的-n选项和-N选项可以指定一次性读取多少个字符。
# 只读一个字符
read -n 1 data <a.txt
# 读100个字符,但如果不足100字符时遇到换行符则停止读取
read -n 100 data < a.txt
# 强制读取100字符,遇到换行符也不停止
read -N 100 data < a.txt
如果按照字符数量读取,直到把文件读完,则使用while循环,且将文件放在while结构的后面,而不能放在while循环的条件位置:
# 正确
while read -N 3 data;do
echo "$data"
done <a.txt
# 错误
while read -N 3 data < a.txt;do
echo "$data"
done
按分隔符读取
read命令的-d选项可以指定读取文件时的分隔符。
# 一直读取,直到遇到字符m才停止,并将读取的数据保存到data变量中
read -d "m" data <a.txt
如果要按分隔符读取并读完整个文件,则使用while循环:
while read -d "m" data ;do
echo "$data"
done <a.txt
按行读取
read默认情况下就是按行读取的,一次读取一行。
# 从a.txt中读取第一行保存到变量data中
read line <a.txt
如果要求按行读取完整个文件,则使用while循环:
while read line;do
echo "$line"
done <a.txt
一次性读整个文件
要一次性读取完整个文件,有两种方式:
- 按照字符数量读取,且指定的字符数要大于文件的总大小
- 按分隔符读取,且指定的分隔符是文件中不存在的字符,这样的话会一直读取,因为找不到分隔符而读完整个文件
# 指定超出文件大小的字符数量
read -N 1000000 data <a.txt
echo "$data"
# 指定文件中不存在的字符作为分隔符
read -d "_" data <a.txt
echo "$data"
精通awk系列(3):铺垫知识:读取文件的几种方式的更多相关文章
- Java读取文件的几种方式
package com.mesopotamia.test; import java.io.BufferedReader; import java.io.ByteArrayInputStream; im ...
- java读取文件的几种方式性能比较
//普通输入流读取文件内容 public static long checksumInputStream(Path filename) { try(InputStream in= Files.newI ...
- hadoop 读取文件的两种方式
1.操作javaAPI方式 static{ URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory()); } public stat ...
- python读取文件的几种方式
http://www.cnblogs.com/nkwy2012/p/6023710.html
- 精通awk系列文章
精通awk系列文章 我录制了两个awk相关的视频教程: Awk经典实战案例精讲 精通awk精品课程:awk从入门到精通 1.安装新版本的gawk 2.本教程测试所用示例文件 3.铺垫知识:读取文件的几 ...
- 精通awk系列
安装新版本gawk awk有很多种版本,例如nawk.gawk.gawk是GNU awk,它的功能很丰富. 本教程采用的是gawk 4.2.0版本,4.2.0版本的gawk是一个比较大的改版,新支持的 ...
- Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!
在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面.所以, 今天完整的分享Spring Boot读取配置文件的几种方式! S ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- 简介C#读取XML的两种方式
简介C#读取XML的两种方式 作者: 字体:[增加 减小] 类型:转载 时间:2013-03-03 在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的 ...
随机推荐
- 一个有意义的Day类
早晨去单位的路上听到电台里在说“Everyday is a new chance to change your life”,正好最近在学Python类的使用方法,于是我编了一个关于Day的类,以供参考 ...
- 2019-2020-1 20199304《Linux内核原理与分析》第一周作业
通过对Linux基础课程的学习,我对Linux的背景以及和Windows的区别有了了解, Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有资金支持,部分软件质量和体验欠 ...
- SpringBoot日志处理之Logback
日志处理是一个正式项目必备的功能,日志要能够根据时间.类型等要素,根据指定格式来保存指定的日志,方便我们观察程序运行情况.定位程序bug. SpringBoot中推荐使用Logback日志框架. 本节 ...
- Shell入门01-bash Shell特性
命令和文件自动补齐 [root@hadoop04 ~]# yum -y install bash-completion 命令历史记忆功能 1.上下键 查看历史命令 2.!number 执行histor ...
- oracle实例状态
oracle数据库实例启动过程分三个步骤,分别是启动实例,加载数据库,打开数据. 1.NOMOUNT模式:这种模式只会创建实例,不会打开任何的数据文件,用户要以sysdba的身份登录,才具有关闭和启动 ...
- Python中 * 与 **, *args 与 **kwargs的用法
* 用于传递位置参数(positional argument) ** 用于传递关键字参数(keyword argument) 首先,先通过一个简单的例子来介绍 * 的用法: def add_funct ...
- Node升级——Node Binary管理模块"n"
Node.js的开发非常活跃,它的最新稳定版本也频繁变化,你不时会发现,一个模块不能在你当前的Node版本上使用,此时你需要升级Node 幸运的是,可以用一种非常简单的方法来管理你的Node版本,即使 ...
- STM32调试总结
1.卡死在这里的问题:没有中断处理函数,程序无法进入中断处理函数.DMA2_Channel3_IRQHandlerDMA2_Channel4_IRQHandlerDMA2_Channel5_IRQHa ...
- Java_用*输出等腰三角形
// 代码............................................................... import java.util.Scanner;public ...
- 【CentOS7】修改yum源
[CentOS7]修改yum源 转载:https://www.cnblogs.com/yangchongxing/p/10645944.html 1.备份源 # mv /etc/yum.repos.d ...