Name State Dns
DeltaService running DeltaService.test.qa.domain.com
DeltaService_1 stopped
DeltaService_2 stopped DeltaService_2.test.qa.domain.com
UnitedService running UnitedService.test.qa.domain.com
UnitedService_1 stopped
UnitedService_2 running UnitedService_2.test.qa.domain.com
以上資料在執行期間顯示為我的日志的一部分。我想要做的是在日志中搜索具有相似名稱且具有 DNS 的服務,并使用 bash 腳本將它們存盤在一個陣列中。例如,如果我想要 DeltaService,我希望能夠檢索“DeltaService”和“DeltaService_2”并存盤在一個陣列中,我可以在其中使用這些服務名稱進行進一步處理。我怎樣才能做到這一點?我試過的:
#"${serviceLogs[@]}" = contains the structured data.
print -- '%s\n' "${serviceLogs[@]}" | grep -oh "\w*DeltaService\w*"
output:
DeltaService
DeltaService_1
DeltaService_2
#I don't need DeltaService_1 because it has no DNS.
uj5u.com熱心網友回復:
awk似乎是正確的工具:
printf -- '%s\n' "${serviceLogs[@]}" |
awk '$1 ~ /^DeltaService/ && $3 != "" {print $1}'
DeltaService
DeltaService_2
uj5u.com熱心網友回復:
根據 OP 的評論:
serviceLogs='Name State Dns
DeltaService running DeltaService.test.qa.domain.com
DeltaService_1 stopped
DeltaService_2 stopped DeltaService_2.test.qa.domain.com
UnitedService running UnitedService.test.qa.domain.com
UnitedService_1 stopped
UnitedService_2 running UnitedService_2.test.qa.domain.com'
awk一種用于決議資料的想法:
$ awk -v ptn="DeltaService" '$1~ptn && $3 {print $1}' <<< "${serviceLogs}"
DeltaService
DeltaService_2
將結果存盤在bash名為 的陣列中services[]:
$ services=( $(awk -v ptn="DeltaService" '$1~ptn && $3 {print $1}' <<< "${serviceLogs}") )
$ typeset -p services
declare -a services=([0]="DeltaService" [1]="DeltaService_2")
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/479321.html
