【发布时间】:2021-03-23 06:17:54
【问题描述】:
我有以下数据文件:
variable "ARM_CLIENT_ID" {
description = "Client ID for Service Principal"
}
variable "ARM_CLIENT_SECRET" {
description = "Client Secret for Service Principal"
}
# [.....loads of code]
variable "logging_settings" {
description = "Logging settings from TFVARs"
}
variable "azure_firewall_nat_rule_collections" {
default = {}
}
variable "azure_firewall_network_rule_collections" {
default = {}
}
variable "azure_firewall_application_rule_collections" {
default = {}
}
variable "build_route_tables" {
description = "List of Route Table keys that need direct internet prior to Egress FW build"
default = [
"shared_services",
"sub_to_afw"
]
}
我想做两件事:
- 打印不带引号的变量名
- 仅在代码块不包含
default时打印变量名称
我知道我可以像这样打印变量名称:awk '{ gsub("\"", "") }; (/variable/ && $2 !~ /^ARM_/) { print $2}'
我知道我可以打印代码块:awk '/variable/,/^}/',结果:
# [.....loads of code output before this]
variable "logging_settings" {
description = "Logging settings from TFVARs"
}
variable "azure_firewall_nat_rule_collections" {
default = {}
}
variable "azure_firewall_network_rule_collections" {
default = {}
}
variable "azure_firewall_application_rule_collections" {
default = {}
}
variable "build_route_tables" {
description = "List of Route Table keys that need direct internet prior to Egress FW build"
default = [
"shared_services",
"sub_to_afw"
]
}
但是,我不知道如何打印代码块“如果”它们不包含default。我知道我需要使用 if 语句,也许还有一些变量,但我不确定如何使用。
此代码块不应出现在我为其获取变量名的输出中:
variable "build_route_tables" {
description = "List of Route Table keys that need direct internet prior to Egress FW build"
default = [
"shared_services",
"sub_to_afw"
]
}
最终输出不应包含那些具有default:
# [.....loads of code output before this]
expressroute_settings
firewall_settings
global_settings
peering_settings
vnet_transit_object
vnet_shared_services_object
route_tables
logging_settings
最好我想保留一个单独的 AWK 命令或文件,没有管道。我对此有一些不喜欢管道的用途。
EDIT:更新理想输出(遗漏了一些带有default的示例)
【问题讨论】:
-
为什么
azure_firewall_application_rule_collections在输出中?代码块有default = {} -
如果记录与正则表达式不匹配,条件
!/regexp/将为真。 -
@Barmar;好的,我如何使用它来消除我不想要的块?
-
如果您只打印满足该条件的块,您将消除其他块。
-
请更新预期输出以匹配样本输入(例如,
expressroute_settings不在样本输入中,但在预期输出中...??