如何选择行并重新格式化命令输出?

如何选择行并重新格式化命令输出?

有没有办法格式化以下输出,以便仅打印第 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 行现在合并,并删除大括号。这就是打印的内容。

相关内容