4번째 필드를 2행이 아닌 1행으로 병합하는 방법

4번째 필드를 2행이 아닌 1행으로 병합하는 방법

이는 show versionCisco APIC의 출력입니다.

보시다시피 컨트롤러의 호스트 이름이 AB_CDE_FGH_IJ_ACI_APC-0001두 줄로 분할되는 이상한 출력이 있습니다.

다른 호스트 이름도 마찬가지입니다.

show versionCisco APIC의 실제 출력

AB_CDE_FGH_IJ_ACI_APC_0001# show version 

 Role        Pod         Node        Name                      Version              
 ----------  ----------  ----------  ------------------------  -------------------- 
 controller  1           1           AB_CDE_FGH_IJ_ACI_        3.2(4e)              
                                     APC-0001                                       
 controller  2           2           AB_CDE_FGH_IJ_ACI_        3.2(4e)              
                                     APC-0002                                       
 controller  3           3           AB_CDE_FGH_IJ_ACI_        3.2(4e)              
                                     APC-0003                                       
 spine       1           111         AB_CDE_FGH_IJ_ACI_SPN_01  n9000-13.2(4e)       
                                     11                                             
 spine       1           112         AB_CDE_FGH_IJ_ACI_SPN_01  n9000-13.2(4e)       
                                     12                                             
 spine       1           113         AB_CDE_FGH_IJ_ACI_SPN_01  n9000-13.2(4e)       
                                     13                                             
 leaf        1           1101        AB_CDE_FGH_IJ_ACI_LEF_11  n9000-13.2(4e)       
                                     01                                             
 leaf        1           1102        AB_CDE_FGH_IJ_ACI_LEF_11  n9000-13.2(4e)       
                                     02                                             
 leaf        1           1103        AB_CDE_FGH_IJ_ACI_LEF_11  n9000-13.2(4e)       
                                     03    

Cisco ACI 자체에서 이 문제를 해결할 수 있는지는 확실하지 않지만 Cisco APIC 출력을 파일에 sed저장한 다음 Linux 시스템에서 스크립트를 실행하면 문제를 해결할 수 있을 것이라고 생각했습니다 .awkshow versionshow_version.txt

sed불행하게도 저는 스크립팅 에 능숙하지 않습니다 awk.

그러한 출력을 생성할 수 있는 방법이 있습니까?

[user@Linux ~]$ sed_or_awk_script_here show_version.txt

AB_CDE_FGH_IJ_ACI_APC_0001# show version 

 Role        Pod         Node        Name                        Version              
 ----------  ----------  ----------  ------------------------    -------------------- 
 controller  1           1           AB_CDE_FGH_IJ_ACI_APC_0001        3.2(4e)
 controller  2           2           AB_CDE_FGH_IJ_ACI_APC_0002        3.2(4e)                                   
 controller  3           3           AB_CDE_FGH_IJ_ACI_APC_0003        3.2(4e)                                   
 spine       1           111         AB_CDE_FGH_IJ_ACI_SPN_0111  n9000-13.2(4e)                          
 spine       1           112         AB_CDE_FGH_IJ_ACI_SPN_0112  n9000-13.2(4e)                            
 spine       1           113         AB_CDE_FGH_IJ_ACI_SPN_0113  n9000-13.2(4e)                            
 leaf        1           1101        AB_CDE_FGH_IJ_ACI_LEF_1101  n9000-13.2(4e)                            
 leaf        1           1102        AB_CDE_FGH_IJ_ACI_LEF_1102  n9000-13.2(4e)                            
 leaf        1           1103        AB_CDE_FGH_IJ_ACI_LEF_1103  n9000-13.2(4e)       

 [user@Linux ~]$

답변1

awk첫 번째 행이 show version빈 행(세 개의 헤더 행이 됨) 이라고 가정하고 사용하세요 .

awk '
  NR<4{ print; next }        # print 3 header lines
  NF>1{                      # if number of fields > 1
    sub($4, $4 "%s" )        # append `%s` to 4th field
    fmtstr=$0                # save modified line in `fmtstr`
    next                     # continue with next line
  }
  { printf fmtstr "\n", $1 } # print `fmtstr` with first field as argument
' show_version.txt

산출:

 Role        Pod         Node        Name                      Version
 ----------  ----------  ----------  ------------------------  --------------------
 controller  1           1           AB_CDE_FGH_IJ_ACI_APC-0001        3.2(4e)
 controller  2           2           AB_CDE_FGH_IJ_ACI_APC-0002        3.2(4e)
 controller  3           3           AB_CDE_FGH_IJ_ACI_APC-0003        3.2(4e)
 spine       1           111         AB_CDE_FGH_IJ_ACI_SPN_0111  n9000-13.2(4e)
 spine       1           112         AB_CDE_FGH_IJ_ACI_SPN_0112  n9000-13.2(4e)
 spine       1           113         AB_CDE_FGH_IJ_ACI_SPN_0113  n9000-13.2(4e)
 leaf        1           1101        AB_CDE_FGH_IJ_ACI_LEF_1101  n9000-13.2(4e)
 leaf        1           1102        AB_CDE_FGH_IJ_ACI_LEF_1102  n9000-13.2(4e)
 leaf        1           1103        AB_CDE_FGH_IJ_ACI_LEF_1103  n9000-13.2(4e)

관련 정보