Скрипт Bash / Shell объединяет строку в while l oop с параметрами поля при чтении файла - PullRequest
0 голосов
/ 16 июня 2020

Мне сложно правильно прочитать файл, который представляет собой не что иное, как файл ключ = значение.

Это файл:

#test.txt

global.project=99999 
global.env=pr
global.app=Terraform
global.dcs=CloudBroker
global.cbp=n/a

Это код:

TS=""
while IFS== read -r f1 f2; do
    echo $f1
    echo $f2
    val=$f2
    TS+="\"${f1}\":\"${f2}\","

done < "tags.txt"

echo "${TS}" # Result: ","global.cbp":"n/audBroker

Результат очень странный. Когда я удаляю f2, проблем не возникает.

Ожидаемый результат должен быть:

«global.opco»: «99999», «global.env»: «pr» и т. Д. .

Ответы [ 2 ]

1 голос
/ 17 июня 2020

Просто регулярное выражение:

sed 's/\(.*\)=\(.*\)\r\?/"\1":"\2"/' tags.txt | paste -sd,
#                                                        ^ merge lines with comma
#                        ^  ^^^  ^     add some characters
# put  ^^^^^^             ^^           <- here
# put          ^^^^^^          ^^      <- here
1 голос
/ 17 июня 2020

Основываясь на комментарии @GordonDavisson, я изменил скрипт, и теперь он работает как шарм:


TS=""
while IFS=$'=\r' read -r f1 f2; do
    echo $f1
    echo $f2
    val=$f2
    TS+="\"${f1}\":\"${f2}\","

done < "tags.txt"

echo "${TS}" # Result: {"global.project":"99999","global.env":"pr","global.app":"Terraform","global.dcs":"CloudBroker","global.cbp":"n/a",}

...