0

シェルスクリプトを使用してデータベースからコース名を取得しています。コンピュータサイエンス、環境科学などのコース名にスペースがある場合、名前はリストの2つの異なるインスタンスに保存されます。つまり、スペースの前とスペースの後に、別のインスタンスの「コンピュータ」と別のインスタンスの「科学」のように格納されますが、リストの同じインスタンスに「コンピューター サイエンス」のように格納したいのですが、この問題を解決するにはどうすればよいですか

ここにコース名を取得するための私のコードがあります

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
4

3 に答える 3

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"
于 2013-02-12T09:44:08.893 に答える
1

その方法が機能しない場合は、そのようにしないでください。for ... in行ではなく単語で分割します。

おそらくより良い解決策は、よりラインを意識したものを使用することです:

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

概念実証については、次のタンスクリプトを参照してください。

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
于 2013-02-12T09:43:17.630 に答える
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"
于 2013-02-12T09:59:17.447 に答える