Bash でファイルを 1 行ずつ読み取るにはどうすればよいですか?

Bash (Unix/Linux コマンド ライン環境) でファイルを 1 行ずつ読み取る必要がある場合、この目的を達成するためのさまざまな方法があります。この記事では、Bash でファイルを 1 行ずつ読み取るさまざまな方法と、その使用方法と例について詳しく説明します。以下は、Bash でファイルを 1 行ずつ読み取るための詳細な手順です。

ここに画像の説明を挿入

方法 1: while ループと read コマンドを使用する

Bash では、while ループと read コマンドを組み合わせて使用​​し、ファイルを 1 行ずつ読み取ることができます。read コマンドは、標準入力またはファイルから 1 行を読み取り、変数に格納するために使用されます。このメソッドを使用したサンプルコードは次のとおりです。

#!/bin/bash

file="example.txt"

# 检查文件是否存在
if [ -f "$file" ]; then
  # 逐行读取文件
  while IFS= read -r line; do
    echo "$line"
  done < "$file"
else
  echo "文件 $file 不存在"
fi

上の例では、最初にファイルが存在するかどうかを確認します。ファイルが存在する場合は、while ループを使用してファイルを 1 行ずつ読み取ります。IFS=行区切り文字の自動トリミングを無効にして、各行の内容がそのまま読み取られるようにするために使用されます。読み取られた各行は変数に保存されline、オンデマンドで処理できます。この例では、各行を標準出力に出力するだけです。

方法 2: cat コマンドとパイプラインを使用する

ファイルを 1 行ずつ読み取るもう 1 つの方法は、cat コマンドとパイプ演算子 ( |) を使用して、ファイルの内容を while ループに渡すことです。このメソッドを使用したサンプルコードは次のとおりです。

#!/bin/bash

file="example.txt"

# 检查文件是否存在
if [ -f "$file" ]; then
  # 逐行读取文件
  cat "$file" | while IFS= read -r line; do
    echo "$line"
  done
else
 当我们使用`cat`命令和管道操作符`|`将文件的内容传递给`while`循环时,每一行都会作为标准输入传递给`read`命令。`read`命令将每行的内容存储在变量`line`中,并在循环体内对其进行处理。

需要注意的是,使用这种方法时,`while`循环将在子进程中运行,因此在循环体内对变量的修改不会影响到父进程。

## 方法三:使用grep命令

另一种逐行读取文件的方法是使用`grep`命令并指定行号。这种方法适用于只需要处理文件中特定行的情况。以下是使用该方法的示例代码:

```bash
#!/bin/bash

file="example.txt"

# 检查文件是否存在
if [ -f "$file" ]; then
  # 逐行读取文件
  line_number=1
  while IFS= read -r line; do
    if [ "$line_number" -eq 3 ]; then
      echo "第 $line_number 行的内容是: $line"
    fi
    line_number=$((line_number + 1))
  done < <(grep -n "" "$file" | cut -d: -f2-)
else
  echo "文件 $file 不存在"
fi

上の例では、grepコマンドと空のパターン ( "") を使用して、ファイル内の行番号と各行の内容を取得しました。次に、コマンドを使用して行の内容を抽出し、処理のためにループcutに渡します。whileこの例では、ファイルの 3 行目の内容のみを出力します。

< <(command)コマンドの出力をファイルとしてループに渡し、行ごとに読み取るための構文。

これらのメソッドは、Bash でファイルを 1 行ずつ読み取るさまざまな方法を提供します。特定のニーズに応じて、ファイルの各行を処理する適切な方法を選択できます。これらのメソッドは、ファイルの内容の反復処理、特定の行の抽出など、Bash でファイルを操作するための柔軟で信頼性の高いソリューションを提供します。

おすすめ

転載: blog.csdn.net/weixin_43025343/article/details/131447020