簡體   English   中英

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

[英]Search A Variable in Specific Column in BASH with 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

我只想打印沒有的行

  • 第 2 列的 word 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。 請幫幫我。 注意:

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

運行良好。 但需要所有三個標准。

你有沒有嘗試過

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

當您可以再次使用~ regex 運算符時,我不確定您為什么使用 index 函數。

我懷疑問題出在其他地方。

如果

awk blah blah

然后打印23

$(awk blah blah)

將嘗試將23作為 shell 命令執行(通常會失敗)。 至少在調試此問題時刪除進程替換。

順便說一下,一些 Sun 系統的 Awk 非常有限,但我想這不是問題所在。 不過,您可能想在 google 上搜索“Solaris XPG4 Awk”。

謝謝你們@tripleee 和@bkmoney 我已經使用了下面的命令並且工作正常:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM