需要从 awk 命令的结果中提取字符串并复制到输出文件

需要从 awk 命令的结果中提取字符串并复制到输出文件

我想从 terraform.tfstate 文件中提取字符串。

我正在运行以下 ack 命令:...

awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate

运行此命令会导致:

"private_ip": "10.42.229.45",

我想提取第二组双引号之间的字符串,10.42.229.45并将其复制到输出文件中。

有人可以提供如何做到这一点的指导/建议吗?

答案1

很可能您所需要的只是:

awk -F'"' '/nifi1a/{f=1} f && /private_ip/{print $4; exit}' terraform.tfstate

但是如果没有示例输入,这只是一个猜测,代码的原始部分可能不是最佳的,可能有一些更好的(更简洁、可移植、健壮等)方法来完成您想要的事情。

不要假设阅读您问题的人会知道“terraform.tfstate 文件”或任何其他输入格式是什么,请始终向我们展示简洁、可测试的示例输入和预期输出,以便我们能够最好地帮助您。

答案2

print您可以使用字符串split并仅打印所需的部分:

awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4];exit}' terraform.tfstate

如果您想创建第二个命令来处理结果,您可以使用命令:

awk '/nifi1a/{x=1}x&&/private_ip/{print;exit}' terraform.tfstate | awk -F\" '{print $4}'

这个想法是使用双引号"作为分隔符并$0在数组中拆分。然后只打印数组的一个元素。

如果你想添加主机名,命令将是:

awk '/nifi1a/{x=1}x&&/private_ip/{split($0,a,"\""); print a[4], "nifi1a";exit}' terraform.tfstate >>/etc/hosts

相关内容