1

私はこのコマンドを使用しています:

mysql -u user -ppassword database -e "select distinct entityName,entitySource from AccessControl" 

出力は次のようになります。

+-----------------------+--------------+
| entityName            | entitySource |
+-----------------------+--------------+
| low                   | Native       |
| high                  | Native       |
| All Groups            | AD           |
| Help Ser vices Group  | AD           |
| DEFAULT_USER_GROUP    | Native       |
| SYSTEM                | Native       |
| DEFAULT_BA_USER_GROUP | Native       |
| soUsersGrp            | Native       |
+-----------------------+--------------+

entityName私の質問は、値を格納する変数の配列を動的に作成するにはどうすればよいentitySourceですか? 私が使用する必要があるのは、entityName と entitySource のすべての値を使用して、別のテーブルを更新することです。

以前は、出力をファイルに保存し、awk を使用して各行にアクセスしようとしていましたが、1 行に複数の単語が含まれている可能性があるため、役に立ちません。

4

3 に答える 3

1

確かに、これはできます。シェルでmysqlをmysqlにパイプするのは厄介だという考えを支持したいのですが、なぜそれを行う必要があるのか​​ は理解しています(パイプmysqlするときなどpsql)。

mysql -qrsNB -u user -p password database \
    -e "select distinct entityName,entitySource from AccessControl" | \ 
        while read record; do
            NAME="`echo $record|cut -d' ' -f 1`"       # that's a tab delimiter
            SOURCE="`echo $record|cut -d'   ' -f 2`"   # also a tab delimiter 
            # your command with $NAME and $SOURCE goes here ... 
            COMMAND="select trousers from namesforpants where entityName='${NAME}'" # ...
            echo $COMMAND | mysql # flags ...
        done

フラグは-rs、出力をトリミングして、それが提供するテーブルのものを-q理解する必要がないようにし、結果をバッファリングしないように-B要求し、バッチモードを-N要求し、列名を持たないように要求します。

これらの変数をどうするかはあなた次第です。おそらく、データの一部にスペースが含まれていると述べたように、補間や引用符について心配するのではなく、そのループでステートメントを作成し、それらを後続のプロセスにフィードします。または、ファイルに書き込み/追加して、それを後続のプロセスにフィードすることもできます。

いつものように、マニュアルはあなたの友達です。私もあなたの友達になりますが、マンページにはこのような答えがあります。:-)

于 2013-10-24T00:13:48.797 に答える
0

確認してください。 で修正しましexecた。

[wcuser@localhost]$ temp=`exec mysql -h10.10.8.36 --port=3306 -uwcuser -pwcuser@123 paycentral -e "select endVersion from script_execution_detail where releaseNo='Release1.0' and versionPrefix='PS'"|tail -1`

[wcuser@localhost]$ echo $temp

19

于 2013-12-20T10:41:09.423 に答える
0
#!/usr/bin/env bash
mysql -u user -ppassword database -e "select distinct entityName,entitySource from AccessControl" | while read name source; do
    echo "entityName: $name, entitySource: $source"
done
于 2012-07-26T11:48:18.227 に答える