num=$(echo "$4" | grep '^[1-9][0-9]*$') || num=$(egrep '<(choose|noregister|stop)>' $1 | wc -l) echo "num=$num"
if ! num=$(echo "$4" | grep '^[1-9][0-9]*$') ; then
num=$(egrep '<(choose|noregister|stop)>' $1 | wc -l)
fi
echo "num=$num"
grep -m$i crs_key $1 -A6 找到包含其後面 6 行的 i 筆選課資料,再以 tail -n7 取得最後一筆選課資料,存放於變數 xml 中。
特別注意﹗資料來源為 DOS 格式,必須使用 dos2unix 指令將其轉成 UNIX 格式,否則無法放在單一變數中。
xml=$(grep -m$i crs_key $1 -A6 | tail -n7 | dos2unix)
crs_no 的內容。
crs_no=$(echo $xml | sed 's?.*crs_no>\(.*\)</crs_no.*?\1?')
for ((i=1;i<=$num;i++)); do
xml=$(grep -m$i crs_key $1 -A6 | tail -n7 | dos2unix)
contextid=$(echo $xml | sed 's?.*crs_key>\(.*\)</crs_key.*?\1?') ;id=$contextid
acy=$(echo $xml | sed 's?.*acy>\(.*\)</acy.*?\1?')
sem=$(echo $xml | sed 's?.*sem>\(.*\)</sem.*?\1?')
acysem=$acy$sem
crs_no=$(echo $xml | sed 's?.*crs_no>\(.*\)</crs_no.*?\1?')
sbj_name=$(echo $xml | sed 's?.*sbj_name>\(.*\)</sbj_name.*?\1?')
lastname=$(echo $xml | sed 's?.*stuid>\(.*\)</stuid.*?\1?') ; username="s$lastname"
scr_kind=$(echo $xml | sed 's?.*scr_kind>\(.*\)</scr_kind.*?\1?')
if grep -q -m1 -A7 "<crs_key>$id" $2; then
echo -e "crs_key=$id\tcrs_no=$crs_no\tstuid=$username\tscr_kind=$scr_kind\tsbj_name=$sbj_name"
fi
done
grep -o '>.*<' | sed 's/[><]//g' 或 sed 's?.*>\(.*\)<.*?\1?g',一次濾除所有標籤,並將資料以陣列方式存放在變數 arra 中。
arra=($(grep -m$i crs_key $1 -A6 | tail -n7 | grep -o '>.*<' | sed 's/[><]//g'))
arra=($(grep -m$i crs_key $1 -A6 | tail -n7 | sed 's?.*>\(.*\)<.*?\1?g'))
for ((i=1;i<=$num;i++)); do
arra=($(grep -m$i crs_key $1 -A6 | tail -n7 | sed 's?.*>\(.*\)<.*?\1?g'))
contextid=${arra[0]}; id=${arra[0]}
acy=${arra[1]}
sem=${arra[2]}
acysem=$acy$sem
crs_no=${arra[3]}
sbj_name=${arra[4]}
username="s${arra[5]}";lastname=${arra[5]}
scr_kind=${arra[6]}
if grep -q -m1 -A7 "<crs_key>$id" $2; then
echo -e "crs_key=$id\tcrs_no=$crs_no\tstuid=$username\tscr_kind=$scr_kind\tsbj_name=$sbj_name"
fi
done
| 執行速度 | 優點 | 缺點 | |
| 函式 | 11m 55s | 函式可攜性,程式較具彈性。 | 速度很慢,且背景執行時函式讀取錯誤。 |
| 變數 | 4m 9s | 不受 XML 標籤順序變動影響。 | 必須多花費一些時間。 |
| 陣列 | 1m 20s | 一次處理,速度最快。 | XML 標籤順序變動,程式必須做調整。 |