我正在编写shell脚本来替换数据库中的名称,为此我在.txt文件中有当前名称和新名称的用户列表。文件格式如下所示
bound method car.car_method of <__main__.car object at 0x005D2290>
为此,我正在写&#34; for loop&#34;使用**new name current name**
abc pqr
def stq
mnd tdh
命令,在我想要的地方,它应该为我提供awk
的值,即$1
,abc
,def
等。
我已经为下面的循环编写了
mnd
但不知怎的,这不起作用。有人可以帮助在这里用shell脚本编写代码吗?
答案 0 :(得分: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
:
awk '{...}' | bash
如果你确实想要使用bash
和for
循环,你可以这样做:
#!/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
在结尾处取消| mysql ...
位以查看为mysql
准备的输出。