У меня проблемы с поиском последнего вхождения строки в файле с использованием awk. Я передаю строку в примере сценария "Ping не удалось на имя хоста". Я продолжаю получать awk: ^ неопределенная строка. #! / Bin / ш
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 с опцией -v
-v
awk -v pattern="$*" 'match($0, pattern) {f=$0} END {print f}'
Смысл одинарных кавычек вокруг строки awk - хранить все в первом аргументе (и предотвращать подстановку оболочки).Вы можете быть немного более гибкими с тем, как вы объедините этот аргумент как
awk "/$args/"' {f=$0} END{print f}' $TMP_FILE > data.out