在awk中分配bash关联数组

Ric*_*hip 4 bash shell awk

我的问题是,是否可以在awk脚本中分配bash变量.

即假设以下是我写的shell脚本,

declare -A sample_associative_array
awk -F'=' '{$sample_associative_array[$2]=$1}'  /tmp/sample.txt
Run Code Online (Sandbox Code Playgroud)

给定/tmp/sample.txt有:

abc=0
def=1
Run Code Online (Sandbox Code Playgroud)

我试过了

echo $sample_associative_array[0]
Run Code Online (Sandbox Code Playgroud)

它不起作用.

任何帮助,将不胜感激.

干杯!

che*_*ner 7

不完全相同,但您可以awk使用bash内置命令可以使用的输出字符串declare来填充关联数组.不过,我不完全确定你为什么要这样做.

$ declare $( awk -F'=' '{print "aa["$2"]="$1}' sample.txt )
$ echo ${aa[0]}
abc
$ echo ${aa[1]}
def
Run Code Online (Sandbox Code Playgroud)


Dan*_*zar 0

你不能那样做。Awk 和 Bash 使用完全不同的变量范围,允许一个使用另一个中声明的变量将严重侵犯进程主权。

您想要做的事情可以通过使用参数扩展并删除前缀/后缀(例如${parameter#word}和 ) ,使用 Bash 非常简单地完成${parameter%word}。有关详细信息,请参阅 Bash 手册。

另外,Bash 中的数组引用使用其他语法:${sample_associative_array[0]}就是您想要的。