【发布时间】:2020-10-25 01:00:04
【问题描述】:
我有一个带有 2 个参数和一个条件的 awk 命令 - 如果它已满,则返回第二个参数。到目前为止,它看起来像这样并且运行良好
awk -v PARAM_NAME="user" '{ if ($1 == "\""PARAM_NAME"\":") { print $2;}}'
现在,我想添加一个检查,看看第二个参数是否以某个字符结尾。我知道,为了读取 $2 的最后一个字符,我需要这样读取它。
echo "${2: -1}"
问题是——我不知道如何正确地逃避那些双重问题(或者至少我认为问题出在哪里)。这就是我现在所拥有的,有人可以告诉我它有什么问题吗?谢谢
awk -v PARAM_NAME="user" '{ if ($1 == "\""PARAM_NAME"\":" && "${2: -1}" == "\"","\"") { print $2;}}'
整个命令
cf env some-odata-app | grep "\"hana\":" -A 30 | awk -v PARAM_NAME="user" -v lastchar="${2: -1}" '{ if ($1 == "\""PARAM_NAME"\":" && lastchar == ",") { print substr($2, 2, length($2)-3);}}'
前两个命令后的预期输入。我想从引号中清除密码和用户。所以需要知道是从末尾删掉两个还是三个字符
"hana": [
{
"binding_name": null,
"credentials": {
"password": "obfuscated",
"schema": "oiuhjoiuhyupoihj",
"url": "pkpokpokp[kjpo[kpo",
"user": "USER"
},
]
【问题讨论】:
-
将 shell 变量传递给
awk应该是awk -v var="$shell_variable" '{....}'您能否添加更多详细信息,以便我们可以更好地理解您的问题,因为您的问题并不清楚问题。 -
你好,这是整个命令的样子。它从 Cloud Foundry 获取环境变量并尝试清除引号,问题是 json 中的最后一个不以 coma 结尾,因此在解析它时最后一个字符会被剪切。现在只是尝试确定最后一个字符,然后需要处理这两种情况-> cf env hana-cloud-analytics-odata-app | grep "\"xsuaa\":" -A 30 | awk -v PARAM_NAME="xxx_param" '{ if ($1 == "\""PARAM_NAME"\":" && "${2: -1}" != "\"","\"") { print substr ($2, 2, 长度($2)-3);}}'
-
如果您可以使用示例输入和所需输出(对应于示例输入)更新问题,那么理解要求会更容易一些
-
好的,更新了 - 试图尽可能减少问题,也许这不是一个好主意:)
-
预期的输出是什么?
USER和obfuscated在不同的行上?这两个值在一行中并带有分隔符(空格?逗号?冒号?)?您需要将这 2 个值捕获到调用 shell 脚本中的变量中,还是只打印到标准输出?
标签: awk quotation-marks