我正在编写一个脚本,该脚本读取用户的输入,然后使用将其分为多个字段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
不确定为什么需要awk,但是可以将-a
标志添加到其中read
以获取数组。假设您正在谈论的字段/列由空格分隔/分隔。
read -rp "Enter args: " -a input
printf 'Your 3rd argument was %s\n' "${input[2]}"
您可以遍历输入。
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
使用该命令打印所有字段的另一个答案,这$0
又read
回到了我使用的第一个答案read -ra
read -rp "Enter args: "
read -ra fields < <(awk '{\*Do some stuff with fields*\;print $0}' < <(printf '%s' "$REPLY"))
打印所有字段
printf '%s\n' "${fields[@]}"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句