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 数组的字段以及它是如何索引的。

相关内容