awk +在awk中设置外部变量

时间:2015-05-05 08:56:20

标签: linux awk

以下awk语法剪切了文件中的行

来自端口XNT1

的行

直到 END OF COMMAND

/* [5] */
int i = -1;
unsigned u = reinterpret_cast<unsigned&>(i);

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

但是由于某些原因,awk中的XNTF没有得到&#34; XNT1&#34;值,而awk不显示行!!!!!!!!

 #  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不起作用?以及如何解决它?

2 个答案:

答案 0 :(得分:2)

我通常会尝试避免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

答案 1 :(得分:1)

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

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

通常情况下,$0 ~ some_string会将$0(该行)与some_string的{​​{1}}进行匹配,并将其解释为正则表达式。