GNU/Linux >> Linux の 問題 >  >> Linux

ファイルの行をループする方法は?

このファイルがあるとしましょう:

hello
world
hello world

このプログラム

#!/bin/bash

for i in $(cat $1); do
    echo "tester: $i"
done

出力

tester: hello
tester: world
tester: hello
tester: world

forが欲しいのですが ただし、空白を無視して各行を個別に繰り返します。つまり、最後の2行は

に置き換える必要があります。
tester: hello world

"$(cat $ 1)";で引用符foriを使用する 結果はi ファイル全体が一度に割り当てられます。何を変更すればよいですか?

承認された回答:

(9年後:)
提供された両方の回答は、最後に改行がないファイルでは失敗します。これにより、最後の行が事実上スキップされ、エラーが発生せず、災害につながります(難しい方法で学習しました:)。

>

私がこれまでに見つけた最も簡潔な解決策は、「Just Works」(bashとshの両方で):

while IFS='' read -r LINE || [ -n "${LINE}" ]; do
    echo "processing line: ${LINE}"
done < /path/to/input/file.txt

より詳細な説明については、このStackOverflowの説明を参照してください:ファイルの最後に改行がない場合に「読み取り中」(Bash)を使用してファイルの最後の行を読み取る方法は?

注意:このアプローチでは、最後の行に改行がない場合は、最後の行に改行が追加されます。


Linux
  1. ファイルに複数の行を追加するにはどうすればよいですか?

  2. Grep一致後のファイルの行数をカウントする方法は?

  3. Linuxコマンドラインでファイルの特定の行を表示する方法

  1. UNIX/Linux でファイルの行数を数える方法

  2. Bashを使用してファイルの最後から2番目の行を読み取る方法は?

  3. sed を使用してファイルの 1 行目にテキストを挿入するにはどうすればよいですか?

  1. コマンドラインを使用してLinuxでtar.gzファイルを抽出する方法

  2. ファイルの最初の行の前にテキストを挿入する方法は?

  3. コマンドラインで gz 圧縮ファイルの最後の行を出力するには?