2016-08-04 4 views
0

リモートサーバー上の機能をawkスクリプトを実行します基本的に私が実行したいすべてのサーバーへのアクセス権を持っている)と私は多くのコンパイルエラーを取得しています、私は次のコードを使用しています:私は以下のような機能を備えてawkのスクリップを持っている

for server in 01 02 03 04; do 
ssh [email protected]$server ' 
hostname -f; 
cd /logs/dir/path; 
for file in log-file-name.log; 
do 
    echo "File Name- "$file; 
    grep -v "Some Text" $file | awk -F [:\ ] '{sub(/T/, " "); if($8~500) CNT[$1":"$2]++} END {for (c in CNT) print c, "--", CNT[c]}' | sort; 
    echo "==============Done with $file=================="; 
done 
' 2>&1 | grep -v 'THIS SYSTEM IS RESTRICTED'; done 

誰かがこの上で私を助けてくださいことはできますか?私の問題は、このスクリプトdosentはコンパイルエラーがあるが、私は多くのコンパイルエラーが発生している。

ありがとうございます!

+0

投稿したawkスクリプトには機能がありません。あなたは '' logfile.logのファイルのために ''と思いますか?スクリプトには何もコンパイルされていないので、コンパイルエラーは発生しません。多分、構文エラーまたはランタイムエラーを意味しますか?エラーが発生した場合、plsはエラーメッセージを出力します。 –

+0

こんにちはMorton、logfiles.logのファイル - これは複数のファイルをループします。テストするために私は1つのファイルを言いましたが、複数のファイルをループする必要があります。私が得ているエラーメッセージは---> webserveriw01.cesoです。bash:-c:行6: 'grep -v '一部のテキスト「$ file | awk -F [:\] \ {sub(/)」は、 CNT [c] CNT [$ 1 ":" $ 2] ++} END(CNTの場合はCNTの場合)print c、 " - "、CNT [c]} \ | sort; – Vasu

+0

awkは完全に複数のファイル(awk 'スクリプト' file1 file2 ... ')を開くことができますが、ループは必要ありません。正しい形式のエラーメッセージを含めるように質問してください。 –

答えて

1

bashでは、一重引用符(')は、他の一重引用符を除くすべての文字をエスケープします。そのため、OP内の{sub...のようなものは、ローカルスクリプトによって解釈されます。このようリモートbashにスクリプトを渡すために

(1がsshによって開かれた)、以下を行う必要があります。

  • は、単一引用符で囲んでスクリプト全体を囲みます。

  • '\''でスクリプト内に一重引用符'を置き換えてください(外側のものではありません)。この動作方法:最初の'は現在の引用を終了します。 \'には引用符付きの単一アポストロフィが含まれています。最後の'は見積もりを再度開きます。

スクリプト例:

foo=bar 
echo 'foo=$foo' 
echo "foo=$foo" 

予想される出力: "手で"

foo=$foo 
foo=bar 

例呼び出し、すなわち、これはあなたが、端末に入力すると何かである:

ssh server ' 
foo=bar 
echo '\''foo=$foo'\'' 
echo "foo=$foo" 
' 

ただし、すべてこの引用のビジネスを失う:あなたはファイルmyscriptに(通常の単一引用符付き)オリジナルのスクリプトを保存し、代わりに実行することができます:

ssh server "$(cat myscript)" 

この方法は、ローカルbashはもはや登場する単一引用符で混同されませんmyscriptで、コンテンツ全体が引用されるためです。

+0

こんにちはDavid、ありがとうあなたはあなたの時間と助けを得るのに大いに役立ちますが、それでも私は例外として次のようになっています:webserveriw01.ceso.com bash:-c:6行目:予期しないトークンの近くで文法エラー '( ' bash:-c:6行目:' grep -v "いくつかのテキスト" $ file | awk -F [:\] \ {sub(/ T /、 ""); if($ 8〜500)CNT [$ 1 ":" $ 2] ++} END {for(c CNTで)print c、 " - "、CNT [c]} \ | sort; ' – Vasu

+0

非常にお詫び申し上げます基本的な質問!!! – Vasu

+0

デービッド、ありがとう、私のために働いてくれてありがとう – Vasu

関連する問題