在 Shell 脚本中高效地逐行读取文件

2023-11-07

逐行读取文件是许多 shell 脚本中的常见任务,因为它允许您单独处理文件的每一行并根据每一行的内容执行操作。在 Linux shell 脚本中逐行读取文件的方法有多种,但有些方法比其他方法更有效。在本文中,我们将探讨在 Linux shell 脚本中逐行读取文件的一些最有效的方法。

使用 while 循环

在 shell 脚本中逐行读取文件的最基本方法是使用 while 循环和 read 命令。 read 命令从文件中读取一行输入并将其存储在变量中,然后可由脚本进行处理。 while 循环允许您迭代文件的各行,直到到达末尾。下面是一个示例:

1
2
3
4
5
6
7
#!/usr/bin/env bash
 
# 逐行读取文件
while read line; do
  # 处理单行内容
  echo "$line"
done < file.txt

这种方法简单易懂,但有一定的局限性。一个限制是读取命令一次只能读取一行,因此对于包含多行的大文件来说,速度可能会较慢。另外,read命令只能从标准输入(stdin)读取,因此必须使用

将 while 循环与 cat 一起使用

在 shell 脚本中逐行读取文件的更有效方法是将 cat 命令与 while 循环结合使用。 cat 命令读取文件并将其内容输出到 stdout,然后可由 while 循环处理。下面是一个示例:

1
2
3
4
5
6
7
#!/usr/bin/env bash
 
# 逐行读取文件
while read line; do
  # 处理单行内容
  echo "$line"
done < <(cat file.txt)

此方法比读取命令更有效,因为它将整个文件一次读取到内存中,而不是一次读取一行。对于包含多行的大文件来说,这可能会更快。此外,cat 命令可以从任何文件中读取,而不仅仅是 stdin,因此您可以使用它从多个文件或不在当前目录中的文件中读取。

将 while 循环与 sed 一起使用

在 shell 脚本中逐行读取文件的另一种有效方法是结合使用 sed 命令和 while 循环。 sed 命令是一种功能强大的文本处理工具,可以读取文件并将其内容一次一行输出到 stdout。下面是一个示例:

1
2
3
4
5
6
7
#!/usr/bin/env bash
 
# 逐行读取文件
while read line; do
  # 处理单行内容
  echo "$line"
done < <(sed -n -e 1p file.txt)

此方法类似于 cat 命令,但效率更高,因为它一次只输出一行。对于包含多行的大文件来说,这可能会更快。此外,sed命令有许多选项和功能可用于操作输出,因此它是一个非常灵活的文本处理工具。

综上所述,在 Linux shell 脚本中逐行读取文件的方法有多种。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Shell 脚本中高效地逐行读取文件 的相关文章

  • 从多个进程附加到单个文件的“线程安全”?

    假设我有 X 个进程打开文件 Y 进行追加 每个进程一次只写入一行 带有 n 真正的日志条目 文件 Y 中的每一行是否保证不会错误地交错 更新 本地附加文件系统 问题取决于正在进行什么类型的写入 如果您使用带缓冲的标准 I O 这通常是大多
  • Java-使用InputStream作为文件

    我正在尝试使用上传的 docx 文件生成 PDF 文档JOD转换器 http www artofsolving com opensource jodconverter 对生成 PDF 的方法的调用如下所示 File inputFile ne
  • PHP 中是否有相当于 subprocess 的东西?

    在 Java 和 Python 中 你有ProcessBuilder or 子流程 https docs python org 2 library subprocess html可让您使用未转义字符串轻松启动进程的模块 例如 ls some
  • 如何使用 echo 命令写入并附加到文件

    我正在尝试编写一个脚本 它将使用 echo 并写入 附加到文件 但我的语法中已经有了 字符串 说 echo I am Finding difficult to write this to file gt file txt echo I ca
  • 拼写检查 shell 脚本

    我有一些疑问 我对一个应该是简单拼写检查器的脚本有疑问 它的目的是 当发现错误的单词时 它会提示用户输入该单词的正确拼写 如果用户输入正确的拼写 则会显示更正的单词以及错误的单词 下面 在读完所有单词之后 但是 如果用户只是按 Enter
  • 如何在不加载到内存的情况下对大型 csv 文件进行排序

    我有 20GB csv 文件 如下所示 CallId MessageNo Information Number 1000 1 a 2 99 2 bs 3 1000 3 g 4 66 2 a 3 20 16 3 b 1000 7 c 4 99
  • 在 Linux 中重新启动时,新创建的文件变为 0 kb(数据被覆盖为空)

    我遇到了一个奇怪的问题 这让我发疯 当前的任务是在 root 用户第一次登录时启动一组文件 并在同一用户第二次登录时启动另一组文件 我决定使用 profile 和 bashrc 文件 并在第一次登录期间发生的任务结束时重新加载 bashrc
  • 从文件中获取InputStream,该文件可能位于(或不位于)类路径中[重复]

    这个问题在这里已经有答案了 只是想知道哪种方法是读取类路径中的文件的最佳方法 我唯一拥有的是带有文件路径的属性 举个例子 文件路径 类路径 com mycompany myfile txt 文件路径 文件 myfolder myfile t
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • 退出代码大于 255 — 可能吗?

    如果是 在哪个操作系统 shell 或其他操作系统上 考虑以下 Java 程序 我使用 Java 只是作为示例 任何语言都适合这个问题 这更多地与操作系统有关 public class ExitCode public static void
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • 保存录制的 AVAudioRecorder 声音文件:现在怎么办? (iOS、Xcode 4)

    在我的应用程序中 我希望用户能够录制一个声音文件并播放它 然后保存该声音文件以供以后使用 我用了本教程 http www techotopia com index php Recording Audio on an iPhone with
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • C# 写入文件的性能

    我的情况概述 我的任务是从文件中读取字符串 并将它们重新格式化为更有用的格式 重新格式化输入后 我必须将其写入输出文件 这是必须完成的操作的示例 文件行示例 ANO 2010 CPF 17834368168 YEARS 2010 2009
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron
  • 拒绝访问特定目录中的特定文件类型

    对于某些应用程序 用户可以上传自己的文件 由于这可能是非常大的文件 因此他们可以通过自己的 FTP 客户端上传这些文件 当然 我不希望他们上传一些可以访问服务器上所有其他文件的 PHP 文件 我想要防止这种行为的方法之一是拒绝仅访问这些文件
  • 编辑文件名在 JComboBox 中的显示方式,同时保持对文件的访问

    我对 Java 很陌生 对堆栈溢出也很陌生 我正在尝试利用 JMF API 创建一个用 Java 编码的简单媒体播放器 到目前为止 我已经能够设置一个简单的队列 播放列表来使用JComboBox called playListHolder
  • 如何制作 Bash 脚本来查找项目中未使用的图像?

    如何制作一个 Bash shell 脚本 它可以识别所有 jpg gif 和 png 文件 然后识别文件夹中任何文本文件中哪些文件未通过 url href 或 src 链接 这就是我开始的 但我最终得到了与我想要的相反的结果 我不想知道引用
  • 在文件复制/上传未完成时读取文件内容

    例如 每 5 秒 服务器检查文件是否已添加到特定目录 如果是 它会读取并处理它们 相关文件可能非常大 例如 100 Mo 因此将它们复制 上传到上述目录可能会很长 如果服务器尝试访问尚未完成复制 上传的文件怎么办 JAVA是如何管理这些并发
  • 是否有 ADB 命令来检查媒体是否正在播放

    我想使用 ADB 命令检查根植于终端的外部设备中是否正在播放音频 视频 我无法找到任何 ADB 命令 如果有 我尝试过 adb shell dumpsys media player 我想要一个命令来指定视频是否正在运行 您可以使用以下命令查

随机推荐

  • SSM集成Redis的小案例

    一 详情介绍 这里是使用Window版本的Redis 将下载好的Windows版本的Redis压缩包解压到一个目录下 客户端使用的是Redis Desktop Manager 使用Redis需要启动相应的服务 操作如下图所示 备注 双击打开
  • LDAP应用技术简述

    LDAP应用技术简述 一 一 简介 a X500 目录服务 OSL X 500目录是基于OSI网络协议的目录服务协议 也是LDAP的前身 但是X 500的缺点是不支持TCP IP 而是支持OSI协议 显然 在 Windows等个人电脑上不可
  • Jenkins

    Jenkins 文章目录 Jenkins 1 Jenkins概述 Jenkins特性 2 系统集成工具 Jenkins和Hudson 3 部署方案 手动部署流程 自动化署流程 4 Jenkins svn自动部署 环境准备 yum部署Jenk
  • Linux安装Oracle JDK

    从公司云平台申请的虚拟机默认安装了open jdk 想改成oracle 官方的jdk 1 检查系统jdk版本 root localhost software java version openjdk version 1 8 0 102 Op
  • vue js 获取yaml文件内容并且将文件内容转换为JSON

    写在公共js内 export function eadFile file const reader new FileReader const promise new Promise resolve reject gt reader onlo
  • 通过libusb读取鼠标数据

    include
  • 临界区锁 InitializeCriticalSection()--- EnterCriticalSection()--LeaveCriticalSection()

    1 InitializeCriticalSection 此函数初始化一个临界区对象 格式 void InitializeCriticalSection LPCRITICAL SECTION lpCriticalSection 参数 lpCr
  • C++ VTK 8.2 如何绘制弹簧图形

    创建圆柱 vtkSmartPointer
  • c++primer 第十五章笔记

    15 1 oop 概述 面向对象程序设计核心思想 数据抽象 继承 动态绑定 继承 联系在一起的类构成一种层次关系 通常在层次关系的根部有一个基类 派生类 其他类则直接或间接地从基类继承而来 继承示例代码 class Quote public
  • c语言之矩阵

    矩阵作为线性代数核心内容之一也是刷题人时常会遇到的一种类型 本篇博客简单介绍一下矩阵转置 上三角矩阵以及杨氏矩阵 1 转置矩阵 输入m行n列的矩阵以n行m列的方式打印出来 只要将数组的行列进行交换即可 并不难想也不难写 相应练习 牛客网BC
  • 【GPIO】通用输入/输出工作模式原理

    1 GPIO基本结构 保护二极管 IO引脚上下两边两个二极管用于防止引脚外部过高 过低的电压输入 当引脚电压高于VDD时 上方的二极管导通 当引脚电压低于VSS时 下方的二极管导通 防止不正常电压引入芯片导致芯片烧毁 P MOS管和N MO
  • C/C++什么是内存泄露,内存泄露如何避免?

    C C 什么是内存泄露 内存泄露如何避免 1 内存溢出 2 内存泄漏 3 造成内存泄露常见的三种情况 3 1 指针重新赋值 3 2 错误的内存释放 3 3 返回值的不正确处理 4 如何避免内存泄露 5 内存泄露检测工具valgrind 1
  • abstract方法必须在abstract类中 这句话是对的还是错的?

    对 参考文章 https zhidao baidu com question 435526297 html interface中所有的方法都是抽象的 抽象类中部分方法是抽象的 实现interface接口的类必须重写全部方法 而继承抽象类的子
  • UE4(虚幻4)基础:编辑样条曲线实现道路

    一 新建地形 在模式中点击山形状的图标会出现以下界面 下面那几个你可以自己随便调节一下看看都是干什么 都是可视化的东西 很简单 至于这个材质球 在你创建项目的时候如果是默认的 那么系统会默认给你添加新手包 找到StartContent这个文
  • java的动态代理过程

    重点知识回顾 反射机制 在运行期间 对于任意类都能知道它的所有属性和方法 对于任意对象都能调用它的属性和方法 静态代理 通过编写代码完成增强效果 即是通过我们自己编写相关的代码实现增强效果 java的动态代理过程 我们都知道java动态代理
  • 缺失值填充4——使用线性模型(岭回归、Lasso回归、ElasticNet回归)填充序列缺失值

    原始的问题可能是 一个X 包含x1 x2 缺失x x3 预测 gt y 模型填充缺失值 使用 x1 x2 x3 y 预测 gt 缺失x 算法思路 Lasso回归 在线性回归结尾加入绝对值和的正则化方法 L1正则 岭回归 在线性回归结尾加入平
  • 7.集成测试

    一 集成测试介绍 测试 单元测试 集成测试 系统测试 软件开发 需求 高层设计 底层设计 代码 灰盒测试 定义 集成测试 集成测试 综合测试 联合测试 整体测试测试 实验测试 集成测试是软件测试的阶段 在该阶段中 各个软件模块被组合在一起并
  • MD5算法是什么?

    MD5 消息摘要算法 5 是一种广泛使用的加密哈希函数 可生成 128 位 16 字节 哈希值 它由 Ronald Rivest 于 1991 年设计 用于从可变长度输入生成固定大小的输出 该输出代表输入的指纹 为什么 MD5 很重要 传输
  • 如何使用 Homebrew 在 macOS 上安装 NVM

    Node Version Manager NVM 是一种广泛使用的工具 允许开发人员在单台计算机上管理 Node js 的多个版本 它的重要性怎么强调都不为过 因为 Node js 应用程序有时可能是特定于版本的 并且不同的项目可能需要不同
  • 在 Shell 脚本中高效地逐行读取文件

    逐行读取文件是许多 shell 脚本中的常见任务 因为它允许您单独处理文件的每一行并根据每一行的内容执行操作 在 Linux shell 脚本中逐行读取文件的方法有多种 但有些方法比其他方法更有效 在本文中 我们将探讨在 Linux she