我的 sql 查詢的輸出有多個列,并包含包含空格的字串值。我需要撰寫 bash 腳本,其中我必須將值讀入變數,然后在腳本中進一步使用它,并將它們插入到另一個資料庫中。
當我將輸出存盤到陣列中時,字串值會根據空間拆分并存盤到陣列中的不同索引中。我如何在 bash 腳本中處理這種情況。
CMD="SELECT * FROM upload where upload_time>='2020-11-18 00:19:48' LIMIT 1;"
output=($(mysql $DBCONNECT --database=uploads -N --execute="$CMD"))
echo ${output[9]}
Output:
version test_id upload_time parser_result 25 567 2020-11-18 00:19:48 <p1>box crashed with exit status 0</p1>
上傳時間“2020-11-18 00:19:48”存盤在兩個索引中。更成問題的是“parser_result”值,它是字串。'<p1>box crashed with exit status 0</p1>'存盤在基于空間拆分的不同索引中。
${output[8]} contains '<p1>box'
${output[9]} contains 'crashed'
資料庫非常龐大,我需要決議其中的每一行。由于字串值可以是任何我無法想出的通用代碼。處理這種情況的最佳方法是什么。我是第一次使用 bash 腳本!!我必須使用 bash 腳本,因為該腳本將作為 docker 容器內的 cron 作業運行。
uj5u.com熱心網友回復:
欄位由 TAB 分隔。用它$IFS來決議結果。
IFS=$'\t' output=($(mysql $DBCONNECT --database=uploads -N --execute="$CMD"))
echo "${output[9]}"
如果$DBCONNECT包含用空格分隔的選項,則需要分兩步執行此操作,因為它也$IFS用于拆分該選項。
result=$(mysql $DBCONNECT --database=uploads -N --execute="$CMD")
IFS=$'\t' output=($result)
echo "${ouptut[9]}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/314576.html
