【问题标题】:awk + set external var in awkawk + ​​在 awk 中设置外部变量
【发布时间】:2015-05-05 17:27:51
【问题描述】:

以下 awk 语法从文件中删除行

来自具有端口 XNT1 的行

直到命令结束

 #  awk '/\/stats\/port XNT1\/if/,/END OF COMMAND/' /var/tmp/test 

  >> SW_02_03 - Main# /stats/port XNT1/if
  ------------------------------------------------------------------
  Interface statistics for port XNT1:
  IBP/CBP Discards:                  0
  L3 Discards:                       0


  >> SW_02_03 - Port Statistics# END OF COMMAND
  # 
  # 
  # 

现在我在 awk 命令中将外部变量设置为 XNTF=XNT1

但由于某种原因,awk 中的 XNTF 没有获得“XNT1”值,并且 awk 不显示行!!!!!!!!!

  #  awk -v XNTF=XNT1 '/\/stats\/port XNTF\/if/,/END OF COMMAND/' /var/tmp/test

请告知为什么我设置外部变量时 awk 不起作用?以及如何解决?

【问题讨论】:

    标签: linux awk


    【解决方案1】:

    我通常会尽量避免awk, 中的范围命令,因为它不太灵活。应该这样做:

    awk -v XNTF=XNT1 '$0~"/stats/port " XNTF "/if" {f=1} f; /END OF COMMAND/ {f=0}' file
     >> SW_02_03 - Main# /stats/port XNT1/if
      ------------------------------------------------------------------
      Interface statistics for port XNT1:
      IBP/CBP Discards:                  0
      L3 Discards:                       0
    
    
      >> SW_02_03 - Port Statistics# END OF COMMAND
    

    【讨论】:

      【解决方案2】:

      // 内部,变量没有展开。您必须使用 ~ 运算符来匹配组装的正则表达式:

      awk -v XNTF=XNT1 '$0 ~ "/stats/port " XNTF "/if",/END OF COMMAND/' /var/tmp/test
      

      通常,$0 ~ some_string 匹配 $0(行)与 some_string 被解释为正则表达式。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-12
        • 2023-01-13
        • 2018-03-07
        • 2013-01-08
        • 2012-11-30
        • 1970-01-01
        相关资源
        最近更新 更多