Как я могу прочитать поток пар ключ = значение в bash, если значения могут быть пустыми? - PullRequest
0 голосов
/ 31 мая 2019

Итак, у меня есть несколько файлов свойств, которые содержат ключи и значения в следующем формате:

Key1=value1
Key2=Value2
etc..

Поэтому, когда я запускаю эту команду, чтобы получить ключи:

ssh 172.16.1.1 "grep -v '^#' /src/PTB.properties" | awk -F "=" '{print $1}'

Я получаюследующий вывод

userField
User
srcIP
srcPort
dstIP
dstPort
date
time

И когда я запускаю ту же команду, но с {print $2} в конце, чтобы получить значения:

ssh 172.16.1.1 "grep -v '^#' /src/PTB.properties" | awk -F "=" '{print $2}'

, я получаю следующий вывод:

User-Name
Full-Name
Source-IP-Address
Source-UDP-Port

Target-UDP-Port
Date
Time

Итак, я хочу сказать, что некоторые ключи не имеют значения.

При этом я запускаю следующую команду для получения этих ключей и значений:

while IFS= read -r line; do
    USER_PARAMETERS_KEYS+=( "$line" )
done < <( ssh $ip "grep -v '^#' ${PARAMETER_PATH[$i]}" | awk -F "=" '{print $1}' )

while IFS= read -r line; do
    USER_PARAMETERS_VALUES+=( "$line" )
done < <( ssh $ip "grep -v '^#' ${PARAMETER_PATH[$i]}" | awk -F "=" '{print $2}' )

Моя проблема в том, что USER_PARAMETERS_VALUES не сохраняет нулевые значения.Например, после выполнения этой команды в USER_PARAMETERS_VALUES вместо 8 есть только 7 элементов, поскольку ключ dstIP пуст.

Есть идеи, как решить эту проблему?Спасибо.

1 Ответ

3 голосов
/ 31 мая 2019

Не имеет ли больше смысла захватывать всю строку и анализировать ее локально?

while IFS== read -r key value; do
     keys+=("$key")
     values+=("$value")
done < <(ssh 172.16.1.1 "grep -v '^#' /src/PTB.properties")

Это также позволяет избежать состояния гонки, которое вы получаете, когда удаленный файл может измениться между первым и вторым разом.Вы читаете это.

Сказав это, минимальным изменением было бы печатание кавычек Awk вокруг любого пустого значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...