使用AWK,想要打印包含两个特定单词的最后一行。 假设我有log.txt,其中包含以下日志
log1|Amy|Call to Bob for Food
log2|Jaz|Call to Mary for Toy and Cookies
log3|Ron|Call to Jerry then Bob for Book
log4|Amy|Message to John for Cycle
现在,需要使用“Call”和“Bob”提取最后一行。 我试过 -
#!/bin/bash
log="log.txt"
var="Bob"
check=$(awk -F'|' '$3 ~ "/Call.*$var/" {print NR}' $log | tail -1)
echo "Value:$check"
所以价值:应打印3(第3条记录)。 但它没有打印出来。请建议。我必须使用awk。
答案 0 :(得分:2)
使用GNU awk进行单词分隔符以避免“Bob”错误地匹配“Bobbing”:
$ awk -v var="Bob" -F'|' '$3 ~ "Call.*\\<" var "\\>"{nr=NR; rec=$0} END{if (nr) print nr, rec}' file
3 log3|Ron|Call to Jerry then Bob for Book
见http://cfajohnson.com/shell/cus-faq-2.html#Q24。如果Bob
已保存在名为var
的shell变量中,请使用awk -v var="$var" ...
。