【问题标题】:Reading a File line by line and assigning the value to a variable in a loop逐行读取文件并将值分配给循环中的变量
【发布时间】:2020-01-30 04:50:10
【问题描述】:

我有一个文本文件,其内容如下所示。

CAT,DOG
SPARROW,PIGEON
RAT,BAT
TENNIS,FOOTBALL

此外,我有一个 shell 脚本,它逐行读取此文本文件,为变量赋值并执行某些语句。

例如:

第一行是:CAT,DOG

变量1:猫 变量2:狗

打印变量1 打印变量2

然后代码转到第二行, 第二行是:麻雀,鸽子

变量1:麻雀 变量2:鸽子

打印变量1 打印变量2

它会一直持续到 EOF。

请帮助我为此构建代码。提前致谢

【问题讨论】:

  • 没有人会为你编写完整的代码。你应该至少付出一些努力。你尝试了什么?
  • 为什么不直接awk -F, '{print "v1: " $1 " v2: " $2}' yourfile
  • 我之所以使用shell循环处理文本文件,是因为我编写了spool命令来获取逗号分隔文本文件中的数据输出。
  • 为什么这需要你用 bash 编写程序?

标签: bash shell unix


【解决方案1】:

这里

while IFS=, read -r var1 var2; do 
  printf 'variable1: %-10s variable2: %s\n' "$var1" "$var2"
done < file.txt

如果您希望 var1 和 var2 在循环之外持续存在/存在,请使用数组。

var1=()
var2=()

while IFS=, read -r column1 colum2; do 
    var1+=("$column1") var2+=("$column2")
    printf 'variable1: %-10s variable2: %s\n' "$colum1" "$column2"
done < file.txt

在循环之外 ${var1[@]}${var2[@]} 数组仍然存在/存在

-10只是为了漂亮的缩进,值保存在$var1$var2

【讨论】:

  • Jetchisel 贴出的代码是完全合理的。 “没有工作”是一个无用的评论,因为我们不知道它在什么方面不起作用。以可读的方式发布您尝试过的确切代码(即properly formatted),并解释您如何准确调用脚本,得到什么输出。
猜你喜欢
  • 2012-06-11
  • 2023-01-20
  • 2012-11-12
  • 2019-11-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
相关资源
最近更新 更多