从 Cisco“show switch”输出中删除新行并将其与上一行连接

从 Cisco“show switch”输出中删除新行并将其与上一行连接

删除新行并将其与上一行连接

show switch这是Cisco ACI 中命令的部分示例输出。

Serial Number     Name               
----------------  ------------------ 
ABCDEFGHIJ1       XYZ_ 
                  SPN_01             
ABCDEFGHIJ2       XYZ_ 
                  SPN_02             
ABCDEFGHIJ3       XYZ_ 
                  SPN_03

我尝试了给出的解决方案将下一行与上一行合并

[user@linux ~]$ sed 'H;1h;$!d;g;s/\n  */ /g' sample.txt
Serial Number     Name
----------------  ------------------
ABCDEFGHIJ1       XYZ_  SPN_01
ABCDEFGHIJ2       XYZ_  SPN_02
ABCDEFGHIJ3       XYZ_  SPN_03
[user@linux ~]$

它几乎提供了我想要的输出,除了其中有额外的空间。

所需输出 1

Serial Number     Name
----------------  ------------------
ABCDEFGHIJ1       XYZ_SPN_01
ABCDEFGHIJ2       XYZ_SPN_02
ABCDEFGHIJ3       XYZ_SPN_03

当我尝试使用show switch具有更多列的实际输出时,实际问题就会发生。

[user@linux ~]$ cat output.txt
 ID    Pod   Address          In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name
 ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------
 101   1     192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_
                                                                                                                                                                   SPN_01
 102   1     192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_
                                                                                                                                                                   SPN_02
 103   1     192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_
                                                                                                                                                                   SPN_03
[user@linux ~]$

sed 'H;1h;$!d;g;s/\n */ /g' output.txt没有提供我想要的输出。

[user@linux ~]$ sed 'H;1h;$!d;g;s/\n  */ /g' output.txt
 ID    Pod   Address          In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name                ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------  101   1     192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_  SPN_01              102   1     192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_  SPN_02              103   1     192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_  SPN_03
[user@linux ~]$

awk几乎可以工作,但我不确定-----格式有什么问题。

[user@linux ~]$ awk '{$1=$1;printf("%s ",$0)};NR%2==0{print ""}' output.txt
ID Pod Address In-Band IPv4 In-Band IPv6 OOB IPv4 OOB IPv6 Version Flags Serial Number Name ---- ---- --------------- --------------- ------------------------- --------------- ------------------------- ------------------ ----- ---------------- ------------------
101 1 192.168.1.10 0.0.0.0 :: 10.1.1.10 :: n9000-13.0(2n) asiv ABCDEFGHIJ1 ABC_ SPN_01
102 1 192.168.1.11 0.0.0.0 :: 10.1.1.11 :: n9000-13.0(2n) asiv ABCDEFGHIJ2 ABC_ SPN_02
103 1 192.168.1.12 0.0.0.0 :: 10.1.1.12 :: n9000-13.0(2n) asiv ABCDEFGHIJ3 ABC_ SPN_03
[user@linux ~]$

另一个awk脚本尝试也产生与前一个sed脚本几乎相似的输出

[user@linux ~]$ awk -f script.awk output.txt
 ID    Pod   Address     In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name                ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------  101   1192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_                                                                                                                                                               SPN_01              102   1192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_                                                                                                                                                               SPN_02              103   1192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_                                                                                                                                                               SPN_03
[user@linux ~]$

实际所需输出2

 ID    Pod   Address          In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name               
 ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------ 
 101   1     192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_SPN_01             
 102   1     192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_SPN_02             
 103   1     192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_SPN_03    

答案1

sed '1,2!{N;s/[[:blank:]]*\n[[:blank:]]*//;}' file

在 1-2 范围之外的每一行:

  • 将下一行追加到模式空间
  • 删除前导/尾随空格

答案2

告诉我这是否适合你:

sed 'H;1h;$!d;g;s/\n *  \([A-Z]*\)/\1/g' file

答案3

使用 Raku(以前称为 Perl_6):

raku -e '.put for lines[0...1]; .join("").put for lines.map(*.trim).rotor: 2;'

或者

raku -e '.put for lines[0...1]; .put for lines.map(*.trim).rotor(2).map(*.join: "");'

输入示例 (1):

Serial Number     Name               
----------------  ------------------ 
ABCDEFGHIJ1       XYZ_ 
                  SPN_01             
ABCDEFGHIJ2       XYZ_ 
                  SPN_02             
ABCDEFGHIJ3       XYZ_ 
                  SPN_03

输出示例 (1):

Serial Number     Name               
----------------  ------------------ 
ABCDEFGHIJ1       XYZ_SPN_01
ABCDEFGHIJ2       XYZ_SPN_02
ABCDEFGHIJ3       XYZ_SPN_03

简而言之,前两行(标题)打印有get.put xx 2;。然后lines(懒惰地)读入,每个都被trim-med 以删除周围的空白,并且成对的行被分组在一起rotor: 2(注意:rotor(2)不在行尾时是必需的)。获取输出没有分组的行对之间的空格, usejoin("")和 print-using-terminator,又名put

也适用于 OP 提供的第二个示例文件(如下)。

输入示例 (2):

 ID    Pod   Address          In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name
 ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------
 101   1     192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_
                                                                                                                                                                   SPN_01
 102   1     192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_
                                                                                                                                                                   SPN_02
 103   1     192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_
                                                                                                                                                                   SPN_03

输出示例 (2):

 ID    Pod   Address          In-Band IPv4     In-Band IPv6               OOB IPv4         OOB IPv6                   Version             Flags  Serial Number     Name
 ----  ----  ---------------  ---------------  -------------------------  ---------------  -------------------------  ------------------  -----  ----------------  ------------------
101   1     192.168.1.10     0.0.0.0          ::                         10.1.1.10        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ1       ABC_SPN_01
102   1     192.168.1.11     0.0.0.0          ::                         10.1.1.11        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ2       ABC_SPN_02
103   1     192.168.1.12     0.0.0.0          ::                         10.1.1.12        ::                         n9000-13.0(2n)      asiv   ABCDEFGHIJ3       ABC_SPN_03

注意:您可以稍微简化上面的代码,但需要注意的是,您将join连续看到两个调用:一个-ped 用于连接相邻行且没有中间空格,第二个用于在捕获的之间map添加回换行符\n数据(已被例程处理的数据lines):

raku -e 'raku -e '.put for lines[0...1]; lines.map(*.trim).rotor(2).map(*.join: "").join("\n").put;' 

相关内容