Bash

使用 awk 將行拆分為數組並在呼叫 shell 時使用該數組的值

  • August 26, 2021

我正在嘗試awkbash腳本中使用並執行一項相當常見的任務:迭代結構良好的文件行並通過分隔符將它們拆分為數組。以下是文件中的範例:

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如上所述,刪除的一個附帶好處是,您在循環中創建的任何變數都將在循環結束後繼續存在。

引用自:https://unix.stackexchange.com/questions/113750