2017-12-03 8 views
0

データベースの名前を置き換えるシェルスクリプトを作成しています。このために、現在のユーザー名と新しい名前のリストが.txtファイルにあります。ファイル形式は、このために"forループとawk"のシェルスクリプト構文のヘルプが必要です

**new name  current name** 
abc    pqr 
def    stq 
mnd    tdh 

以下のように私は、私はそれが必要が私にabcすなわち$1の値を与えたいawkコマンドを使って、 "forループ" の書き込みdefmndいれるなど

I

function() 
{ 
cd $directory 

for i `cat $filename.txt` | awk '{print $1}' 
do 
     j=`grep "$i `cat $filename.txt ` | awk '{print $1'} |awk '{print $2}'"` 
     echo "update table SET username = '$i' WHERE username = '$j;" 
done 
} 

しかし、何とかこれは動作していません。誰かがここでシェルスクリプトのコードを書くのを助けることができますか?

答えて

0

データベースまたはご使用の環境に言及していないが、私はあなただけのような何かしたいと思う:

awk '{print "update table SET username=" $1 " where username=" $2 ";"}' filename.txt| someSQLshell 

サンプル出力

update table SET username=newboy where username=oldboy; 
update table SET username=newemployee where username=badboy; 

テスト入力

newboy oldboy 567 q 
newemployee badboy 190 r 

ので、私はmysqlを知らないが、私はそれにあなたができるパイプコマンドを信じる:

awk '{print "update table SET username=" $1 " where username=" $2 ";"}' filename.txt | mysql -h HOST -u USER -p PASSWORD DBNAME 

をこれも動作しますが、あまり効率的である可能性があります

awk '{print "mysql -u user -p pass -e \"update table set username=" $1 " where username=" $2 "\""}' filename.txt 

サンプル出力

mysql -u user -p pass -e "update table set username=newboy where username=oldboy" 
mysql -u user -p pass -e "update table set username=newemployee where username=badboy" 

、それが正しいようならば、あなたはbashへのパイプにできます

#!/bin/bash 
cat filename.txt | while read new old _ ; do 
    echo "update table SET username=$new where username=$old;" 
done | mysql -u USER -p PASSWORD DBNAME 
:あなたは本当に、本当に bashforループを使用する場合は、それをこのような何かを

awk '{...}' | bash 

行うことができます

最後に| mysql ...ビットをオフのままにして、出力を確認してください(mysql)。

+0

私の環境ではmysqlを使用しています。 – user263076

+0

私は 'mysql'で少し試しましたが、間違っている場合は非常に短いファイルでテストを進めてください。 –

+0

クール..ありがとう..働いている。 – user263076

関連する問題