还好有你 發表於 2025-12-8 09:10:37

在 Bash 中循环遍历文件内容的不同方法

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">使用 while 循环和 read 命令</a></li><li><a href="#_label1">使用 for 循环和 cat 命令</a></li><li><a href="#_label2">使用 IFS 进行单词循环</a></li><li><a href="#_label3">使用 awk 高级循环</a></li></ul></div><p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202512/2025120809083198.jpg" /></p>
<p>Bash (Bourne-Again SHell),是一种流行的命令行 SHell 脚本语言,因其简单和易用而被广泛使用。最常见的任务之一,可能需要使用 Bash 遍历文件的内容。</p>
<p>在本文中,我们将探索在 Bash 脚本中使用不同的方法来循环遍历文件内容,包括逐行和逐字读取。</p>
<p class="maodian"><a name="_label0"></a></p><h2>使用 while 循环和 read 命令</h2>
<p><strong>while</strong> 循环结合 <strong>read</strong> 命令是在 Bash 中遍历文件内容的最常用方法。该方法逐行读取文件,对于处理无法装入内存的大文件特别有用。</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
filename="example.txt"
while IFS= read -r line
do
    echo "$line"
done &lt; "$filename"</pre></div>
<p>在本例中,我们使用 <strong>IFS</strong> 变量来指定字段的分隔符(默认情况下是换行符)。<strong>read</strong> 命令读取每一行,<strong>echo</strong> 命令将该行打印到控制台。</p>
<p class="maodian"><a name="_label1"></a></p><h2>使用 for 循环和 cat 命令</h2>
<p>循环遍历文件内容的另一种方法是使用 <strong>for</strong> 循环和 <strong>cat</strong> 命令。</p>
<p>这个方法比 <strong>while</strong> 循环和 <strong>read</strong> 命令效率低,因为它在循环之前将整个文件读入内存。</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
filename="example.txt"
for line in $(cat "$filename")
do
    echo "$line"
done</pre></div>
<p>在这个例子中,我们使用 <strong>cat</strong> 命令来读取文件的全部内容,使用 <strong>for</strong> 循环遍历每一行。但是,该方法默认情况下使用空格(空格、制表符和换行符)拆分了内容,这可能导致处理每行有多个单词的文件时出现意外行为。</p>
<p class="maodian"><a name="_label2"></a></p><h2>使用 IFS 进行单词循环</h2>
<p>如果需要一个字一个字地处理文件,可以使用 <strong>IFS</strong> 变量将分隔符更改为空格。</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
filename="example.txt"
IFS=$' \t\n'
for word in $(cat "$filename")
do
    echo "$word"
done</pre></div>
<p>在本例中,我们将 <strong>IFS</strong> 变量设置为空格,制表符,和换行字符,以单词为分隔循环遍历文件内容。</p>
<p class="maodian"><a name="_label3"></a></p><h2>使用 awk 高级循环</h2>
<p>对于更高级的文件处理,可以使用 <strong>awk</strong> 命令,这是一个功能强大的文本处理工具,具有内置循环功能。</p>
<div class="jb51code"><pre class="brush:bash;">#!/bin/bash
filename="example.txt"
awk '{ for (i=1; i&lt;=NF; i++) print $i }' "$filename"</pre></div>
<p>在本例中,<strong>awk</strong> 读取文件并使用其内置变量 <strong>NF</strong>(字段数)和 <strong>$i</strong>(当前字段值)循环遍历每个字段(单词),此方法对于更复杂的文本操作任务特别有用。</p>
頁: [1]
查看完整版本: 在 Bash 中循环遍历文件内容的不同方法