2013-12-16 9 views
8

私が書いているスクリプトの一部は、同じ文字列のさまざまなテキストファイルをチェックする必要があります。私がちょうど1つのファイルをチェックしなければならなかったので、変数として定義されているものを検索するために、私は門式内の長い文字列リストを持っていました。複数のコマンドを 'if'文でパイプすることはできますか?

category_1=$(sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(sudo zcat myfile | egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(sudo zcat myfile | egrep -c 'Event 7|Event 8|Event 9') 

... 

echo Category 1 

if [[ $category_1 -ge 2 ]];then 

      echo There were $category_1 events 

elif [[ $category_1 -eq 1 ]]; then 

      echo There was $category_1 event 

fi 

は、などなど...

は今、私はgreppedを確認することができるようにそれを変更する必要があります。一致がある場合は、後のスクリプトでvariabledが呼ばれ、画面に出力します複数のテキストファイルに対する文字列私は無駄にはgrep変数とif文で変数やパイプ、それらを、新しいファイルを定義しようとしました:

category_1=$(egrep -c 'Event 1|Event 2|Event 3') 

category_2=$(egrep -c 'Event 4|Event 5|Event 6') 

category_3=$(egrep -c 'Event 7|Event 8|Event 9') 


myfile=$(sudo zcat myfile) 

myfile2=$(sudo zcat myfile2) 

myfile3=$(sudo zcat myfile3) 

... 

echo Category 1 - Myfile 



if [[ myfile | $category_1 -ge 2 ]];then 

      echo There were $category_1 events in myfile 

elif [[ myfile | $category_1 -eq 1 ]]; then 

      echo There was $category_1 event in myfile 

fi 

それは私がif文でパイプコマンドをできないようです。

答えて

11

使用$(...)文字列にコマンドの出力をキャプチャする:

if [[ $(sudo zcat myfile1 | egrep -c 'Event 1|Event 2|Event 3') -ge 2 ]] ; then 
+0

はそれが可能です'egrep'コマンドを変数として設定して、各コマンドに 'イベント1'などを入れる必要はありませんか? grepvariable1 = $ egrep -c 'イベント1 |イベント2 |イベント3'if [[$(sudo zcat myfile1 | grepvariable1)-ge 2]]; – Hxwk

+0

@Hxwk:繰り返したいコードを含む関数を定義することができます。 – choroba

+0

正しい方向に私を指摘してくれてありがとう、私は関数を調べる – Hxwk

0

あなたはifにパイプを使用することができますが、二つのものを混ぜます。 パイプに$category_1を使用します。 $category_1はコマンドではありません。 変数の代わりにコマンド置換を使用できます。

if [[ `sudo zcat myfile | egrep -c 'Event 1|Event 2|Event 3')` -ge 2 ]];then 

などとなる。

コマンドの代わりに変数を使用することもできますが、少し奇妙です。あなたが代わりのようなコマンドを使用することができ

0

ます。if [「$の家」=「素敵」] || [「$の家」=「悪い」]、その後...仕事をする

+2

これは、それがどのように機能し、どのように機能するかを説明すると、はるかに役立つでしょう。また、[ヘルプ]ページで解答のフォーマットについて読むこともできます。 – AdrianHHH

関連する問題