1

我正在尝试根据第 5 列值打印日志文件的行,但最后出现错误。

脚本.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  

我该如何解决 ?

提前致谢。

4

3 回答 3

4

去掉单引号,展开时使用双引号:

str="\$5==\"[$num]\" {print}"

tail -n 10000 /var/temp.log  | awk "$str"
于 2013-09-17T17:33:40.487 回答
2

-v您可以使用以下选项将值传递给 awk,而不是动态构建 awk 程序:

read -p "enter a number: " num
awk -v n="[$num]" '$5==n {print}'

也是{print}条件为真时的默认操作,因此您可以省略它:

awk -v n="[$num]" '$5==n'
于 2013-09-17T18:47:52.143 回答
1

您应该引用 shell 变量以防止分词。尝试:

.... | awk "$str"

也可以使用单引号或双引号,但不能同时使用:

str='$5=="['"$num"']" {print}'
于 2013-09-17T17:33:31.180 回答