我有一個包含此資料的檔案 -
view:
schema1.view1:/some-path/view1.sql
schema2.view2:/some-path/view2.sql
tables:
schema1.table1:/some-path/table1.sql
schema2.table2:/some-path/table2.sql
end:
我必須讀取檔案并將內容存盤在不同的變數中。
viewData=$(sed '/view/,/tables/!d;/tables/q' $file|sed '$d')
tableData=$(sed '/tables/,/end/!d;/end/q' $file|sed '$d')
回顯$viewData
view:
schema1.view1:/some-path/view1.sql
schema2.view2:/some-path/view2.sql
回聲$表資料
tables:
schema1.table1:/some-path/table1.sql
schema2.table2:/some-path/table2.sql
dataArray=("$viewData" "$tableData")
我需要在 dataArray 上使用 for 回圈,以便獲得 4 個不同變數中的所有組件。
讓我們說對于 $viewData,回圈應該能夠像這樣列印 -
objType=view
schema=schema1
view=view1
fileLoc=some-path/view1.sql
objType=view
schema=schema2
view=view2
fileLoc=some-path/view2.sql
我已嘗試使用 sed 和 cut 命令,但它們無法正常作業。我只需要使用 shell 腳本來做到這一點。任何幫助將不勝感激。謝謝!
uj5u.com熱心網友回復:
備注:如果您在輸入中的:和之間添加一個空格字符,/那么您將能夠使用 YAML 感知工具來穩健地決議它。
給定您的示例輸入,您可以使用它awk來生成預期的塊:
awk '
match($0,/[^[:space:]] :/) {
key = substr($0,RSTART,RLENGTH-1)
val = substr($0,RSTART RLENGTH)
if (i = index(key,".")) {
print "objType=" type
print "schema=" substr(key,1,i-1)
print "view=" substr(key,i 1)
print "fileLoc=" val
printf "%c", 10
} else
type = key
}
' data.txt
objType=view
schema=schema1
view=view1
fileLoc=/some-path/view1.sql
objType=view
schema=schema2
view=view2
fileLoc=/some-path/view2.sql
objType=tables
schema=schema1
view=table1
fileLoc=/some-path/table1.sql
objType=tables
schema=schema2
view=table2
fileLoc=/some-path/table2.sql
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535678.html
標籤:狂欢壳脚本
