linux - 如何遍历 .txt 并将每行的值用作变量 Linux Shell

标签 linux bash shell automation

编辑以帮助澄清

目标:设计一个 shell 脚本,允许我从文本文件创建变量,稍后可以由更大的脚本调用

输入文件:TEST.txt

sequence010 FY11
sequence010 FY12
sequence020 FY11
sequence020 FY12
...

每条线代表需要同时利用以代表不同 POV 的成员,即:

POV01=sequence010 FY11
POV02=sequence010 FY12
POV03=sequence020 FY11
POV04=sequence020 FY12
...

计划是以我可以这样创建变量的方式构建它:

POV01=$sequence, $year
POV02=$sequence, $year
POV03=$sequence, $year
export POV01 POV02 POV03

这个主要问题是我如何按顺序逐行读取它们,使正确的序列和年份变量解析为正确的 POV?

我已经尝试了 while 循环、带有嵌套 while 循环的 if 语句、xargs、awk……都无济于事。我最接近的是创建序列和年份变量的 while 循环,但问题是每一行都需要保持相关,因为变量的组合给出了 POV。

最佳答案

带空格的 Shell 变量应该用引号引起来。
使用新的 shell 设置创建一个文件,并在当前 shell 中使用点 (.) 获取该文件。

;> cat TEST.txt
sequence010 FY11
sequence010 FY12
sequence020 FY11
sequence020 FY12

;> cat runit
counter=1
while read -r line; do
        printf 'POV%02d="%s"\n' ${counter} "${line}"
        (( counter = counter + 1 ))
done < TEST.txt > output.txt

;> ./runit

;> cat output.txt
POV01="sequence010 FY11"
POV02="sequence010 FY12"
POV03="sequence020 FY11"
POV04="sequence020 FY12"

;> . output.txt

;> set | grep "^POV"
POV01='sequence010 FY11'
POV02='sequence010 FY12'
POV03='sequence020 FY11'
POV04='sequence020 FY12'

;> echo ${POV02}
sequence010 FY12

关于linux - 如何遍历 .txt 并将每行的值用作变量 Linux Shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29650504/

相关文章:

linux - 学习linux驱动

bash - 如何使用 bash 将一个变量插入另一个变量

Bash 选择忽略空格

bash - sh 命令 : exec 2>&1

regex - 发出运行 sed 以替换文件中的字符串

linux - Git 自动补全看起来很奇怪(而且只有一半功能)

python - CSV 阅读器在 Ubuntu 和 Windows 上的不同输出 - Python

bash - 在 shell 中用逗号替换新行

linux - 带有 -i 选项的 sed 命令在 Mac 上失败,但在 Linux 上有效

linux - 如何知道要使用什么脚本头以及它为什么重要?