awk - Shell 脚本 - 在 awk 命令中正确引用
问题描述
我有一个带有 2 个参数和一个条件的 awk 命令 - 如果它已满,则返回第二个参数。到目前为止,它看起来像这样并且运行良好
awk -v PARAM_NAME="user" '{ if ($1 == "\""PARAM_NAME"\":") { print $2;}}'
现在,我想添加一个检查,看看第二个参数是否以某个字符结尾。我知道,为了读取 $2 的最后一个字符,我需要像这样读取它。
echo "${2: -1}"
问题是 - 我不知道如何正确地逃避那些双重 quetes (或者至少那是我认为问题所在)。这就是我现在所拥有的,有人可以告诉我它有什么问题吗?谢谢
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"
},
]
解决方案
OP 可以添加第二个-v
标志来拉入 shell 变量的最后一个字符,例如:
awk -v PARAM_NAME="xxx_param" -v lastchar="${2: -1}" '{ if ($1 == "\""PARAM_NAME"\":" && lastchar == "\""e"\"") { print $2;}}'
如果目标是找到输入字段的最后一个字符,我们可以使用length()
和substr()
函数的组合,例如,
$ awk '{ print substr($1,length($1),1) }' <<< 'STUVWXYZ'
Z
推荐阅读
- dataframe - 如何删除 Julia 中只有正值的数据框列?
- php - DynamoDB中除了扫描和查询还有其他操作吗?
- node.js - Multer 库的语法错误
- c# - 如何从 Unity 中的另一个脚本中获取对撞机被击中的次数
- javascript - 如何在 Threejs 中删除相机 FoV 不可见的图像部分?
- c++ - 时间上的所有零()都是一样的吗
- reactjs - 在反应中从 JSON 对象中提取元素的索引
- string - AWK How to extract substrings from from a variables position and different separator?
- javascript - Mongoose - 按属性获取项目并过滤对象数组
- snowflake-cloud-data-platform - 来自 snowsql CLI 的错误 - 找不到新数据库