请awk打印包含几个单词的特定单词

时间:2015-09-29 17:31:18

标签: string awk

例如,我有一个句子,上面有单词!在日志文件中

0 1 ! abs tHfih(t) qcds bbc(u)

所以使用下面的代码,我可以找到该行

  awk '
  /[Tt][Hh][Ff]/ { if ($3 ~ /!/) {print "a"; exit 0}}

如何告诉awk打印整行以及包含thf" tHfih(t)"

的完整单词?

打印行

awk '
/[Tt][Hh][Ff]/ { if ($3 ~ /!/) {print "the line containing the match"; exit 0}}

打印单词

awk '
    /[Tt][Hh][Ff]/ { if ($3 ~ /!/) {print "the word containing the match"; exit 0}}

1 个答案:

答案 0 :(得分:3)

这可能更简单

awk 'tolower($0) ~ /thf/ && $3=="!"'

更新

如果您不知道搜索字段的位置。您可以扫描所有字段以进行匹配。例如,对于在第三个位置上有!的行,打印包含thf不区分大小写的行号和单词

awk '$3=="!"{for(i=1;i<=NF;i++) if(tolower($i)~/thf/) print NR, $i}'

更新2

如果你想切换匹配的单词与行

awk -vw=1 '$3=="!"{for(i=1;i<=NF;i++) if(tolower($i)~/thf/) print w?$i:$0}' file

为全行打印设置w = 0,为单词打印设置为1。请注意,这假定行中有一个匹配,否则它将打印所有匹配(以及行模式中的多行)。