Bash 腳本:儲存 awk 欄位以供以後使用

Bash 腳本:儲存 awk 欄位以供以後使用

我正在編寫一個腳本,該腳本讀取用戶的輸入並使用awk.我希望在腳本末尾使用這些字段之一,因此我嘗試將其存儲在某個變數中,但徒勞無功。

一種可能的解決方案是保存輸入並awk在最後再次使用它進行處理,但我想知道是否有任何方法可以在某些變數中保留已處理的資訊。

例如,

read -p "Enter args: "; echo -n $REPLY | awk '{ \*Do some stuff with fields*\; nth=$3}'

# More script

echo "Your 3rd argument was $nth"

但上面不起作用。nth末尾為空(這意味著它是本地的awk?)。

TIA

答案1

不確定為什麼需要 awk,但您可以添加該-a標誌,read以便獲得一個數組。假設您正在討論的欄位/列由空格分隔/分隔。

read -rp "Enter args: " -a input

printf 'Your 3rd argument was %s\n' "${input[2]}"
  • 請記住 bash 數組從零索引開始。

您可以循環輸入。

read -rp "Enter args: " -a input

for ((i=0; i<${#input[@]}; i++)); do
  printf 'Your %d argument was %s\n' "$i" "${input[$i]}"
done

或者像這樣

read -rp "Enter args: " -a input

for i in "${!input[@]}"; do
  printf 'Your %d argument was %s\n' "$i" "${input[$i]}"
done

但這是我使用 awk 要做的事情。

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $3}' <<< "$REPLY")

printf 'Your 3rd argument was %s\n' "$nth"

將兩個欄位(第二個欄位和第三個欄位)儲存在一個變數名中。

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $2, $3}' <<< "$REPLY")

printf 'The argument was %s\n' "$nth"

如果您想將第二個和第三個欄位拆分為不同的變數名稱。

read -rp "Enter args: "

nth=$(awk '{\*Do some stuff with fields*\; print $2, $3}' <<< "$REPLY")

printf 'Your 2nd argument was %s\nYour 3rd argument was %s\n' "${nth#* }" "${nth% *}"
  • "${nth#* }"可以"${nth% *}"用單獨的變數保存。

awk對此打印所有字段的另一個答案使用$0read這又回到了我的第一個答案read -ra

read -rp "Enter args: "

read -ra fields  < <(awk '{\*Do some stuff with fields*\;print $0}' < <(printf '%s' "$REPLY"))

列印所有字段

printf '%s\n' "${fields[@]}"
  • 我對這個問題的第一篇文章/答案展示瞭如何循環 bash 數組的字段以及它是如何索引的。

相關內容