在awk中分配bash关联数组

时间:2013-03-05 07:42:56

标签: bash shell awk

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

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

declare -A sample_associative_array
awk -F'=' '{$sample_associative_array[$2]=$1}'  /tmp/sample.txt

给定/tmp/sample.txt有:

abc=0
def=1

我试过

echo $sample_associative_array[0]

并且它不起作用。

任何帮助都将不胜感激。

干杯!

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:1)

你做不到。 Awk和Bash使用完全不同的变量范围,并且允许一个人使用另一个变量声明的变量将严重违反流程主权。

您尝试做的事情可以通过使用参数扩展和删除前缀/后缀来完成Bash,例如, ${parameter#word}${parameter%word}。有关详细信息,请参阅Bash手册。

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

答案 2 :(得分:1)

没有。子进程无法分配给父进程中的变量,无论语言如何,都会出现此问题。 awk甚至无法直接读取一个bash关联数组,因为您无法从bash(或我知道的任何其他shell)导出数组。

尝试混合语言时,您总会遇到这些问题。一般提示是在bashawk中编写整个批次,两者都非常强大。