我在使用awk搜索文件中字符串的最后一个匹配项时遇到了问题。我将一个字符串传递给脚本示例“对主机名执行Ping操作失败”。我一直收到awk:^未终止的字符串。#!/bin/sh
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发布于 2012-02-24 02:07:13
awk字符串两边使用单引号的目的是将所有内容都放在第一个参数中(并防止shell替换)。您可以更灵活地将该参数组合为
awk "/$args/"' {f=$0} END{print f}' $TMP_FILE > data.out发布于 2012-02-24 02:56:10
与其玩报价游戏,不如使用-v选项将外壳变量传递给awk
awk -v pattern="$*" 'match($0, pattern) {f=$0} END {print f}'https://stackoverflow.com/questions/9418617
复制相似问题