需要shell脚本语法帮助“for循环和awk”
我正在编写shell脚本来替换数据库中的名称,为此,我有用户列表中的当前名称和新名称在.txt文件中。文件格式是像下面需要shell脚本语法帮助“for循环和awk”
**new name current name** abc pqr
def stq
mnd tdh
对于这个我写个“for循环”使用awk
命令,在这里我想它应该给我的$1
即abc
值,def
,mnd
等
我写下如下循环,
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
}
但不知何故,这是行不通的。有人可以帮助在这里写代码在shell脚本?
回答:
你不提一个数据库或您的环境,但我认为你只是想是这样的:
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
。
以上是 需要shell脚本语法帮助“for循环和awk” 的全部内容, 来源链接: utcz.com/qa/259928.html