「for」ループを使用して各行を入力として処理し、ファイルを1行ずつ連続して読み込みます。

「for」ループを使用して各行を入力として処理し、ファイルを1行ずつ連続して読み込みます。

次の値を持つ file.txt ファイルを考えます。

one,two
three,four
five,six
six,seven
red,tree

次のアクティビティを実行するには、シェルスクリプトコマンドが必要です。

  1. Forループ、file.txtと同じ行数に対してループを実行し続ける必要があります。
  2. 各ループ実行では、対応する行を実行への入力と見なす必要があります。

たとえば、最初のループ実行では、ある変数に「1」を保存し、別の変数に「2」を保存する必要がある場合は、実行中に変数値が使用されます。

Input1="one"
Input2="two"

2行目と同様に、「3」は1つの変数に保存し、「4」は別の変数に保存する必要があります。

Input1="three"
Input2="four"

ベストアンサー1

while IFS=, read -r input1 input2; do
    # do stuff with "$input1" and "$input2"
done <file.txt

このコマンドにIFSコンマを設定すると、read各入力行はコンマで区切られます。行の2つのフィールドを読み取ってinput1合計を計算しますinput2

行に複数のフィールドがある場合は、「残り」のデータがに配置されますinput2

データで何をしたいかによって、これは良い考えかもしれません。バラよりシェルループを使用してテキストを処理するのはなぜ悪い習慣と見なされますか?

awkこれは、ループなしで次のデータを解析するのに特に便利です。

$ awk -F, '{ printf("Line %d:\n\tField 1 = %s\n\tField 2 = %s\n", NR, $1, $2) }' file.txt
Line 1:
        Field 1 = one
        Field 2 = two
Line 2:
        Field 1 = three
        Field 2 = four
Line 3:
        Field 1 = five
        Field 2 = six
Line 4:
        Field 1 = six
        Field 2 = seven
Line 5:
        Field 1 = red
        Field 2 = tree

おすすめ記事