コマンド出力で単語が発生した回数を計算する方法

コマンド出力で単語が発生した回数を計算する方法

まず、次のコマンドを実行しています。

実行されたコマンド:

/app/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status

コマンドの出力は次のとおりです。

ZooKeeper JMX enabled by default
Using config: /app/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower

grep 'follower' | wc -l「follower」という単語を使用してgrepし、その単語の総数()を印刷したいと思います。

ここで直面する問題は、コマンドの出力を「コマンドが見つかりません」が発生する変数に入れることができないことです。

-bash-4.2$ cat zookeeper.sh
#!/bin/bash
ZK_STATUS = ` /app/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status `
ABC = $ZK_STATUS | grep 'follower' | wc -l
echo $ABC

出力:

-bash-4.2$ ./zookeeper.sh
ZooKeeper JMX enabled by default
Using config: /app/zookeeper/zookeeper-3.4.10/bin/../conf/zoo.cfg
./zookeeper.sh: line 2: ZK_STATUS: command not found
./zookeeper.sh: line 4: ABC: command not found
0

ベストアンサー1

  1. =エラーは、割り当ての前後にスペースがあるために発生します。これはシェルスクリプトのバグです。

    を使用しvar=value、使用しないでくださいvar = value。それ以外の場合、シェルはvar- というプログラムを実行しようとし、command not foundエラーメッセージが表示されます。

  2. 使用する必要がありますコマンドの置き換えコマンドの出力を変数として取得します。例えば

    ZK_STATUS=$(/app/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status)
    
  3. grep-c一致する行数を数えるオプションがあるので、wc -lそうする必要はありません。

    ZK_STATUS=$(/app/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status)
    ABC=$(printf '%s' "$ZK_STATUS" | grep -c follower)
    

    またはもっと直接的に、

    ABC=$(/app/zookeeper/zookeeper-3.4.10/bin/zkServer.sh status |
          grep -c follower)
    
  4. 単語が複数回表示される行数を計算する代わりに、個々の項目を計算するにはfollower使用できませんgrep -c

    代わりに、次のようにしてください。

    ABC=$(printf '%s' "$ZK_STATUS" | grep -o follower | wc -l)
    

    grep -o各一致は、独自の行に印刷されます。 wc -l次に、この行を計算します。

おすすめ記事