Bash
使用 awk 將行拆分為數組並在呼叫 shell 時使用該數組的值
我正在嘗試
awk
在bash
腳本中使用並執行一項相當常見的任務:迭代結構良好的文件行並通過分隔符將它們拆分為數組。以下是文件中的範例:Joe:Johnson:25 Sue:Miller:27
有許多範例如何在互動模式下在單行上完成此操作,但是,我在一個腳本中執行此操作,在該腳本中,我想在 bash 本身的 awk 子shell 之外使用由 awk 操作的數組:
cat ${smryfile} | while read smryline; do echo ${smryline} #now i want to split the line into array 'linearray' in awk but have it usable when i get back to bash echo ${smryline} | awk '{split($0,$linearray,":")}' varX=$linearray[2] echo $varX #do something with $varX done
我收到一個錯誤:
awk: syntax error at source line 1 context is >>> {split($0,$linearray <<< ,":")} awk: illegal statement at source line 1
是否可以做我想做的事情(使用在 awk 範圍之外定義的數組),我應該怎麼做?
我認為你可以在沒有 awk 的情況下做你想做的事:
cat "${smryfile}" | while IFS=: read first last varx do echo "first='$first' last='$last' varx='$varx'" # do something done
這會產生:
first='Joe' last='Johnson' varx='25' first='Sue' last='Miller' varx='27'
請注意,即使文件中的某些名稱包含空格,此方法也可以使用。
另請注意,
cat
不需要使用上述內容:while IFS=: read first last varx do echo "first='$first' last='$last' varx='$varx'" # do something done <"${smryfile}"
cat
如上所述,刪除的一個附帶好處是,您在循環中創建的任何變數都將在循環結束後繼續存在。