2016-11-06 75 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。 –