需要shell脚本语法帮助“for循环和awk”

我正在编写shell脚本来替换数据库中的名称,为此,我有用户列表中的当前名称和新名称在.txt文件中。文件格式是像下面需要shell脚本语法帮助“for循环和awk”

**new name  current name** 

abc pqr

def stq

mnd tdh

对于这个我写个“for循环”使用awk命令,在这里我想它应该给我的$1abc值,defmnd

我写下如下循环,

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 


如果你真的想用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

以上是 需要shell脚本语法帮助“for循环和awk” 的全部内容, 来源链接: utcz.com/qa/259928.html

回到顶部