使用Awk搜索包含空格的字符串

使用Awk搜索包含空格的字符串,awk,Awk,我在使用awk搜索文件中最后出现的字符串时遇到问题。我将向脚本示例“Ping在主机名上失败”传递一个字符串。我一直感到不舒服:^未终止的字符串。 #!/垃圾箱/垃圾箱 LOG=/opt/netcool/omnibus/log/mttrapd.log TMP_FILE=sitescope.$$ args="$*" #ruby sitescope.rb echo "looking for $1 " tail -1000 $LOG > $TMP_FILE echo "WORD = $a

我在使用awk搜索文件中最后出现的字符串时遇到问题。我将向脚本示例“Ping在主机名上失败”传递一个字符串。我一直感到不舒服:^未终止的字符串。 #!/垃圾箱/垃圾箱

LOG=/opt/netcool/omnibus/log/mttrapd.log
TMP_FILE=sitescope.$$
args="$*"

#ruby sitescope.rb

echo "looking for $1 "

tail -1000  $LOG > $TMP_FILE

echo "WORD = $args"

awk  '"/'$args'/" {f=$0} END{print f}' $TMP_FILE > data.out

rm -f $TMP_FILE

在awk字符串周围使用单引号的目的是将所有内容保留在第一个参数中(并防止shell替换)。你可以更灵活地把这个论点组合起来

awk  "/$args/"' {f=$0} END{print f}' $TMP_FILE > data.out

不要玩报价游戏,而是使用
-v
选项将shell变量传递给awk

awk -v pattern="$*" 'match($0, pattern) {f=$0} END {print f}'