打印日志文件的第五列时出现awk错误

时间:2013-09-17 17:31:46

标签: linux bash awk

我正在尝试根据第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  

我该如何解决这个问题?

提前致谢。

3 个答案:

答案 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}'