2013-02-12 543 views
0

我使用shell腳本從數據庫檢索課程名稱。當計算機科學,環境科學等領域中存在空間名稱時,名稱存儲在列表的兩個不同實例中,即在空間之後和空間之後,如不同實例中的「計算機」和列表的不同實例中的「科學」我想把它保存像「計算機科學」列表中的同一個實例,我如何克服這個問題shell腳本和數據庫

這裏是我的代碼用於檢索課程名稱

db_value=`mysql -uroot -proot -Dproject_db -rN --execute 
    "SELECT CourseName FROM applicant_result"` 
z=1 
for value in $db_value 
    do 
     echo "V,eligibility_$z=$value" 
     let "z+=1" 
    done 
    echo "E,resume" 

而結果我得到(音符值V,eligibility_2和V,eligibility_3)

V,eligibility_1=chemistry 
V,eligibility_2=computer          
V,eligibility_3=science 
V,eligibility_4=mathematics 
V,eligibility_5=physics 

回答

1

如果這種方式行不通,那就不要那樣做。 for ... in分詞而不是分行。

一個可能更好的解決方案是使用更多的東西行意識到:

mysql blah blah blah | awk '{ 
    n = n + 1; 
    print "V,eligability_"n"=$0 
} END { print "E,resume" }' 

請參閱以下tanscript的概念證明:

pax> echo 'chemistry 
...> computer science 
...> mathematcis 
...> physics 
...> basket weaving' | awk '{ 
...>  n = n + 1; 
...>  print "V,eligibility_"n"="$0 
...> } END {print "E,resume"}' 
V,eligibility_1=chemistry 
V,eligibility_2=computer science 
V,eligibility_3=mathematcis 
V,eligibility_4=physics 
V,eligibility_5=basket weaving 
E,resume 
+0

如果我從兩列或多列像第一列檢索數據(數據庫)是CourseName和第二是CourseEligibility那麼這將是對變量$語法值 – shehzy 2013-02-12 11:23:01

+1

@shehzy,我建議問這是一個不同的問題,因爲它更符合SO的工作方式。在評論框中提問不會讓你對SO人有太多的報道。 – paxdiablo 2013-02-12 11:54:24

+1

@shehzy,我相應地修改了我的答案,但我必須第二** paxdiablo **。還要考慮到這種解析不是非常健壯。 – fejese 2013-02-12 14:09:05

3
z=1 
mysql -uroot -proot -Dproject_db -rN --execute "SELECT CourseName FROM applicant_result" | while read value 
do 
    echo "V,eligibility_$z=$value" 
    let "z+=1" 
done 
echo "E,resume" 
+0

是的,它解決了我的問題。感謝您的幫助 – shehzy 2013-02-12 10:41:59

+0

如果我從兩列或更多列中檢索數據(數據庫),如第一列是CourseName,第二是CourseEligibility,那麼變量$ value的語法是什麼 – shehzy 2013-02-12 11:07:45

+0

這很難。您需要以CSV等可解析格式輸出,並將IFS設置爲列分隔符。 – Barmar 2013-02-12 11:11:08

0

的關鍵可能是IFS變量 - 輸入字段分隔符 這決定了哪些字符輸入應該分解爲零件。 所以你的情況,你想通過新線分離:

#!/bin/bash 

db_value=`mysql -uroot -proot -Dproject_db -rN -e "SELECT CourseName, CourseEligibility FROM applicant_result"` 

oldIFS="$IFS" # save old to be able to restore it later 
IFS=" 
"; 
z=1 
for value in $db_value; do 
    name=`echo $value | cut -f1` 
    elig=`echo $value | cut -f2` 
    #do whatever with $name and $elig 
    echo "V,eligibility_$z=$name" 
    : $[z++] 
done 
IFS="$oldIFS" 
echo "E,resume" 
+0

感謝您的回覆。 – shehzy 2013-02-12 10:52:14

+0

如果我從兩列或更多列(如第一列是CourseName)檢索數據(數據庫),第二是CourseEligibility,那麼變量$ value的語法是什麼 – shehzy 2013-02-12 11:22:38