以下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不起作用?以及如何解决它?
答案 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}}进行匹配,并将其解释为正则表达式。