2017-12-03 1 views
0

데이터베이스의 이름을 바꿀 쉘 스크립트를 작성하고 있습니다. 사용자 이름 목록과 .txt 파일의 새 이름 목록이 있습니다. 나에게 $1abc의 가치, def, mnd"for 루프 및 awk"에 대한 쉘 스크립트 구문의 도움이 필요합니다.

I를 제공 내가 "루프"쓰고이를 위해

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

아래 나는 그것이해야 할 awk 명령을 사용하여 같은 파일 형식은 아래처럼 루프를 작성했습니다 :

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-

즉 올바른 보이는 경우, 당신은 할 수 파이프를 :

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 ... 비트를 둡니다.

+0

나는 우리 환경에서 mysql을 사용하고있다. – user263076

+0

나는 mysql을 시도해 보았지만 조심해서 테스트 해보고 잘못된 경우를 대비하여 매우 짧은 파일로 테스트한다. –

+0

쿨 .. 고마워 .. 일하고있어. – user263076

관련 문제