Ben*_*nto 1 variables bash scripting awk scope
我希望在常规文件的每一行中都能获得一部分.为此我在脚本中使用了awk程序.我需要将每个部分放在一个数组中.像这样的东西有效:
declare -i j=1
awk 'BEGIN { FS="|" } { a[j]=$6; ((j++)) }' myFile
Run Code Online (Sandbox Code Playgroud)
但是我在脚本中遇到问题,当我需要使用数组时.实际上,awk块中的数组不会被脚本的其余行看到 - 该块之外的行.怎样才能解决这个问题?
正如汤姆·费内奇(Tom Fenech)所指出的那样,shell代码和awk脚本是独立的世界,各自的变量彼此无关.
(更一般地说,任何外部实用程序都在子进程中运行,因此无法修改调用shell的环境.)
为了读取awk输出到一个bash数组,你必须阅读awk的标准输出输出.
在Bash v4 +中,您可以执行以下操作:
readarray -t a < <(awk 'BEGIN { FS="|" } { print $6 }' myFile)
Run Code Online (Sandbox Code Playgroud)
这"${a[@]}"将从awk'sdout输出中的各个行创建Bash数组.
请注意使用进程substitution(<(...))为readlinevia stdin(<)提供输入,这确保了数组保留在脚本的其余部分的范围内.