![如何选择行并重新格式化命令输出?](https://linux22.com/image/62162/%E5%A6%82%E4%BD%95%E9%80%89%E6%8B%A9%E8%A1%8C%E5%B9%B6%E9%87%8D%E6%96%B0%E6%A0%BC%E5%BC%8F%E5%8C%96%E5%91%BD%E4%BB%A4%E8%BE%93%E5%87%BA%EF%BC%9F.png)
有没有办法格式化以下输出,以便仅打印第 1 行和第 4 行?如果第一行和第四行可以在同一行出现,如下所示:
sw pool test
(无括号)status up
命令和输出示例:
命令:
show server pool
输出:
sw pool test { members 1 ip_addr 200.200.200.111 status up
所需的输出格式(请注意,应删除第 1 行末尾的大括号):
sw pool test status up
我怎样才能得到这个输出,最好使用 awk ?
答案1
使用 awk
这将打印第一行{
和第四行:
$ show server pool | awk 'NR==1{sub(/{/, ""); printf "%s",$0} NR==4'
sw pool test status up
怎么运行的
NR==1{sub(/{/, ""); printf "%s",$0}
条件
NR==1
选择第一行。对于这一行,使用命令{
删除sub
,然后使用打印该行printf
(不带尾随换行符)。NR==4
条件
NR==4
选择第四行。由于没有为此条件指定任何操作,awk
因此将执行默认操作。正如我们想要的,打印该行。
使用 sed
同样的事情也可以用sed
:
$ show server pool | sed 'h;N;N;x;N; s/{\n//'
sw pool test status up
怎么运行的
h
这将保存保留空间中的第一行。
N;N
这是第 2 行和第 3 行。
x
这会交换保持空间和模式空间。这会将第 1 行放回到模式空间中。
N
这会将下一行(第 4 行)读入模式空间,并将其附加到第 1 行。
s/{\n//
这将从第 1 行末尾删除大括号和换行符,以便第 1 行和第 4 行现在合并,并删除大括号。这就是打印的内容。