使用awk在BASH中的特定列中搜索变量

时间:2015-06-14 05:34:32

标签: linux bash awk

我有LOG_FILE,如下所示:

LOG|Server301|2015|05|12|00|58|35|572617|0|COMP|002.01.003.00|DSOHMSN2ViewCallback.cpp|142|CALLBACK:DSOHMSN2ViewCallback::FLIPBypassOn Changed SN=2 old value =2 new value =1
LOG|Client2|2015|05|12|00|58|35|593088|0|COMP|002.01.003.00|AMSN.cpp|12577|CALLBACK:OHMOAM::ohmSN2ViewChange, Old FLIPBypassOnMT
LOG|Server302|2015|05|12|00|58|35|593116|0|COMP|002.01.003.00|AMSN.cpp|12590|CALLBACK:OHMOAM::ohmSN4ViewChange, New FLIPBypassOnMT
LOG|Server301|2015|05|12|00|58|35|593302|0|COMP|002.01.003.00|AMSN.cpp|12577|CALLBACK:OHMOAM::ohmSN3ViewChange, Old disableFLIPBypassOnMT
LOG|Client1|2015|05|12|00|58|35|593324|0|COMP|002.01.003.00|AMSN.cpp|12590|CALLBACK:OHMOAM::ohmSN2ViewChange, New disableFLIPBypassOnMT

我只想打印没有

的行号
    第二栏
  • 单词Server

  • 在第15栏
  • 单词CALLBACK

  • 第15列的变量$parameter_name

我执行了以下命令:

parameter_name="FLIPBypassOnMT"
$(awk -v var="$parameter_name" -F'|' '$2 ~ /Server/ && $15 ~ /CALLBACK/  && index($15,var) { print NR}' $LOG_FILE 2>/dev/null | tail -1)

但没有得到这条线。 我正在使用sun4-solaris。 请帮帮我。 N.B:

$(awk -v var="$parameter_name" -F'|' '$2 ~ /Server/ && $15 ~ /CALLBACK/ { print NR}' $LOG_FILE 2>/dev/null | tail -1) 

运行正常。 但需要所有三个标准。

3 个答案:

答案 0 :(得分:1)

你试过吗

$(awk -v var="$parameter_name" -F'|' '$2 ~ /Server/ && $15 ~ /CALLBACK/  && $15 ~ var { print NR}' $LOG_FILE 2>/dev/null | tail -1)

我不确定为什么在再次使用~正则表达式运算符时使用了索引函数。

答案 1 :(得分:0)

我怀疑问题出在其他地方。

如果

awk blah blah

打印23然后

$(awk blah blah)

将尝试执行23作为shell命令(通常会失败)。至少在调试此问题时删除进程替换。

切线上,一些Sun系统的Awk非常有限,但我想这不是问题所在。不过,你可能想要谷歌用于" Solaris XPG4 Awk"。

答案 2 :(得分:0)

感谢你们@tripleee和@bkmoney 我使用了以下命令并正常工作:

$(nawk -v var="$parameter_name" -F'|' '$2 ~ /Server/ && $15 ~ /CALLBACK/  && $15 ~ var { print NR}' $LOG_FILE 2>/dev/null | tail -1)