2016-11-06 24 views
-2

我有bash脚本,需要用户输入将它们存储在变量中!我使用awk命令来搜索文件中的一些模式:如何让awk命令在Bash脚本中工作?

#!/bin/bash 
echo "Enter Data" 
echo "Enter first pattern" 
read firstpat 

echo "Enter number" 
read num1 

echo "Enter name" 
read name1 

echo "Enter second pattern" 
read secpat 

echo "Enter second number" 
read num2 

echo "Enter name 
read name2 

awk '$0 >= "$firstpat $num1:$name1" && $0 <= "$secpat $num2:$name2"' /dir1/file1 

一切都在脚本中工作正常,但awk命令不显示任何结果。如果我在没有变量的终端中运行相同的awk命令,而不是它的工作文件!

+1

该命令是在它试图访问一个awk脚本中shell变量根本就是错误的,它不会在终端比它工作更好处理一个文件。如果您正在运行一个在您的终端中运行的命令,那不是那个命令。 awk不是shell,请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24。 –

+0

@EdMorton在终端中运行无变量! –

+1

那么这显然不是相同的命令,为什么说它是?像这样添加红鲱鱼只会让你的问题变得混乱。您的问题仅仅是陈述真相,而不会导致人们很难找出您遇到的问题并帮助您解决问题。 “为什么命令X在Y命令不起作用?”是一个非常不同的问题,从“为什么命令Y在环境A中工作而不在环境B中?”。 –

回答

0

awk您必须再次为awk脚本定义shell变量。您可以使用与shell脚本中相同的变量名称。

您可以使用awk这样的:

awk -v "firstpat=$firstpat" -v "num1=$num1" -v "name1=$name1" -v "secpat=$secpat" -v "num2=$num2" -v "name2=$name2" '$0 >= "$firstpat $num1:$name1" && $0 <= "$secpat $num2:$name2"' /dir1/file1 
+0

不,你不能(提示:没有'$'来获取awk变量的内容,'“...”'是一个字符串)并且你没有再次定义shell变量,你正在定义awk变量并用shell变量的值。请参阅http://cfajohnson.com/shell/cus-faq-2.html#Q24。 –