【问题标题】:How to format and align the text using vim, sed or awk command? [closed]如何使用 vim、sed 或 awk 命令格式化和对齐文本? [关闭]
【发布时间】:2018-12-17 23:51:33
【问题描述】:

为了方便起见,我正在尝试对齐文件内容。所有分散的变量都在一行中。也是一阶最小的变量名。有人可以帮助我使用 sed、awk 或 VIM 编辑器实现这一目标吗?

实际文件内容

variable "key_name" {
  default = ""
}

variable "vpc_id" {
  default = ""
}

variable "name" {
  default = ""
}

variable "ami" {
  default = ""
}

variable "instance_type" {
  default = ""
}

variable "name_suffix" {
  default = ""
}

variable "additional_volume_size" {
  default = ""
}

预期输出

variable "ami"                        { default = "" }
variable "name"                       { default = "" }
variable "vpc_id"                     { default = "" }
variable "key_name"                   { default = "" }
variable "name_suffix"                { default = "" }
variable "instance_type"              { default = "" }
variable "additional_volume_size"     { default = "" }

【问题讨论】:

  • 展示你的尝试

标签: vim awk sed terraform


【解决方案1】:

使用awkcolumn

awk 'BEGIN{RS="";FS="\n";OFS=" "}{$1=$1}1' file  | column -t

输出:

variable  "key_name"                {  default  =  ""  }
variable  "vpc_id"                  {  default  =  ""  }
variable  "name"                    {  default  =  ""  }
variable  "ami"                     {  default  =  ""  }
variable  "instance_type"           {  default  =  ""  }
variable  "name_suffix"             {  default  =  ""  }
variable  "additional_volume_size"  {  default  =  ""  }

如果要按变量名的长度对输出进行排序,可以使用awk 输出长度,然后通过管道对长度进行排序并删除,如下所示:

awk 'BEGIN{RS="";OFS=" "}{$1=length($2)" "$1}1' file \
  | sort -k1,1n \
  | cut -d' ' -f2- \
  | column -t

输出:

variable  "ami"                     {  default  =  ""  }
variable  "name"                    {  default  =  ""  }
variable  "vpc_id"                  {  default  =  ""  }
variable  "key_name"                {  default  =  ""  }
variable  "name_suffix"             {  default  =  ""  }
variable  "instance_type"           {  default  =  ""  }
variable  "additional_volume_size"  {  default  =  ""  }

【讨论】:

  • 非常感谢您的快速回复。有没有办法将变量名从小到大排序?
  • 这很难实现,但可行
  • 有什么提示吗?这样我就可以继续尝试了。
  • 你可以使用这个:awk 'BEGIN{RS="";OFS=" "}{$0=length($2)" "$0;$1=$1}1' file | sort -k1,1n | cut -d' ' -f2- | column -t
  • 您可以直接在vi 中执行此操作,方法是按ggVG!,然后按所有awkcut 内容(省略文件名)。
猜你喜欢
  • 2013-02-18
  • 1970-01-01
  • 1970-01-01
  • 2013-02-18
  • 2021-07-31
  • 2021-12-11
  • 1970-01-01
  • 2019-04-10
  • 2020-04-25
相关资源
最近更新 更多