我正在尝试根据第5列值打印日志文件行但最后收到错误。
script.sh
num=0
str=" "
tail -n 10000 /var/temp.log | awk '$5=="[200]" {print}'
echo -n "Enter the first number --> "
read num
str="'\$5==\"[$num]\" {print}'"
echo This is the string for awk argument
echo $str
echo
tail -n 10000 /var/temp.log | awk $str
//getting error here
运行script.sh ==>之后./script.sh
Prints the lines which are consisting [200] in the column 5 of log file.
Enter the first number --> 100
This is the string for awk argument
'$5=="[100]" {print}'
awk: '$5=="[100]"
awk: ^ invalid char ''' in expression
我该如何解决这个问题?
提前致谢。
答案 0 :(得分:4)
删除单引号并在展开时使用双引号:
str="\$5==\"[$num]\" {print}"
tail -n 10000 /var/temp.log | awk "$str"
答案 1 :(得分:2)
您可以使用-v
选项将值传递给awk,而不是动态构建awk程序:
read -p "enter a number: " num
awk -v n="[$num]" '$5==n {print}'
此条件为true时,{print}
是默认操作,因此您可以省略它:
awk -v n="[$num]" '$5==n'
答案 2 :(得分:1)
您应引用shell变量以防止分词。试试:
.... | awk "$str"
也可以使用单引号或双引号,但不能同时使用两者:
str='$5=="['"$num"']" {print}'