使用“for”循环将每一行视为输入,连续逐行读取文件

使用“for”循环将每一行视为输入,连续逐行读取文件

考虑具有以下值的 file.txt 文件

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

需要 shell 脚本命令来执行以下活动

  1. For 循环,其中循环应连续执行,执行的行数与 file.txt 的行数相同
  2. 在每个循环执行中,相应的行应被视为执行的输入。

例如,在第一个循环执行中,“one”应存储在一个变量中,“two”应存储在另一个变量中,以便在执行时使用变量值

Input1="one"
Input2="two"

与第二行执行类似,“三”应存储在一个变量中,“四”应存储在另一个变量中,如下所示

Input1="three"
Input2="four"

答案1

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

为该命令设置IFS逗号read将使其以逗号分隔每个输入行。该行的两个字段将被读入input1input2

如果任何行上的字段多于两个,则“剩余”数据将被放入input2.

根据您想要对数据执行的操作,这可能是也可能不是一个好主意。看为什么使用 shell 循环处理文本被认为是不好的做法?

您会注意到这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

答案2

目前尚不清楚你在问什么。为什么每次迭代都需要整个文件。

你需要这个吗?

while IFS=, read -r Input1 Input2; do
    # do something with the variables
    echo "1=$Input1  2=$Input2"
done < file.txt

相关内容