如何从多行文件中读取变量?

时间:2019-04-15 15:50:23

标签: linux bash

我正在尝试从多行且每行具有多个变量的文件中读取文件。有四个变量:项目,价格,max_qty和min_qty。该文件如下所示:

item price
min_qty max_qty

我尝试过:

while IFS=' ' read -r first second third fourth; do
    echo "$first $second $third $fourth
done

这不起作用。我希望输出为:

item price min_qty max_qty

我还考虑过用空格替换新行,然后从该行读取内容。我不想实际更改文件。

2 个答案:

答案 0 :(得分:3)

read两次:

while read -r first second && read -r third fourth; do 
  echo "$first $second $third $fourth"
done < file

答案 1 :(得分:0)

如果“文件看起来像这样”(两行,每行两个值,而不是像这样的具有多对行的较大文件)是正确的,则可以使用单个read通过使用-d选项将行定界符设置为空:

read -r -d '' first second third fourth <file
echo "$first $second $third $fourth"
  • 代码会在示例文件中显示“ item price min_qty max_qty”。
  • 如果设置了errexitERR陷阱,则在执行read之后,程序将立即安静地退出。有关避免这种情况的方法,请参见Bash ignoring error for a particular command
  • 该代码将使用默认值IFS(空格+ Tab +换行符)运行。如果可以将IFS设置为程序中其他地方的其他内容,请使用IFS=$' \t\n' read -r -d '' ...明确设置它。
  • 如果您更改文件格式(一行中的所有值,一行中的一个值,...),并且假定它仍然仅包含四个值,则代码将继续起作用。
  • 如果文件实际上包含许多行对,则该代码将不起作用。在那种情况下,"read twice"oguz ismail解决方案是好的。