需要帮助的shell脚本语法为" for loop和awk"

时间:2017-12-03 07:35:14

标签: shell for-loop awk

我正在编写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的值,即$1abcdef等。

我已经为下面的循环编写了

mnd

但不知怎的,这不起作用。有人可以帮助在这里用shell脚本编写代码吗?

1 个答案:

答案 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

如果你确实想要使用bashfor循环,你可以这样做:

#!/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准备的输出。