所以我有几个属性文件,其中包含以下格式的键和值:
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
中只有7个项目,而不是8个项目,因为键dstIP
为空。
有什么主意我该如何解决这个问题?谢谢。
答案 0 :(得分:3)
捕获整行并在本地解析它是否更有意义?
while IFS== read -r key value; do
keys+=("$key")
values+=("$value")
done < <(ssh 172.16.1.1 "grep -v '^#' /src/PTB.properties")
这也避免了在第一次读取和第二次读取之间远程文件可能发生更改的情况。
话虽如此,最小的变化就是让Awk在任何空值周围打印引号。