如何循环.text并使用每行的值作为变量Linux Shell

时间:2015-04-15 12:41:00

标签: 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循环,xargs,awk ......都无济于事。我最接近的是一个创建序列和年变量的while循环,但问题是每一行都需要保持相关,因为变量的组合给出了POV。

1 个答案:

答案 0 :(得分:1)

带空格的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