2016-11-06 7 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スクリプト内でシェル変数にアクセスしようとしていることで、単に間違っている、それはファイルでそれが動作よりも良く、端末では動作しません。端末で動作するコマンドを実行している場合は、そのコマンドではありません。 awkはシェルではありません。http://cfajohnson.com/shell/cus-faq-2.html#Q24を参照してください。 –

+0

@EdMortonが変数なしで実行されています! –

+1

それでは明らかに同じコマンドではないので、それはなぜですか?あなたの疑問を混乱させるだけの赤い豚肉を追加する。誤った方向で真実を述べるというあなたの質問は、人々があなたがどのような問題を抱えているのかを把握して修正するのをより困難にするでしょう。 "Command Yはなぜ動作しないのですか?" 「コマンドYは環境Aでは動作しますが、環境Bでは動作しないのはなぜですか?」とはまったく異なる質問です。 –

答えて

0

awkには、awkスクリプトのシェル変数を再度定義する必要があります。シェルスクリプトと同じ変数名を使用できます。あなたはこのような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変数の内容を取得するための '$'はありません。 '' ... "'は文字列です)、シェル変数を再度定義していない場合は、awk変数を定義し、シェル変数の値http://cfajohnson.com/shell/cus-faq-2.html#Q24を参照してください。 –

関連する問題