5

我的问题是,是否可以在 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]

它不起作用。

任何帮助,将不胜感激。

干杯!

4

3 回答 3

9

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

$ declare $( awk -F'=' '{print "aa["$2"]="$1}' sample.txt )
$ echo ${aa[0]}
abc
$ echo ${aa[1]}
def
于 2013-03-05T14:27:25.757 回答
1

你不能那样做。awk 和 Bash 使用完全不同的变量范围,并且允许一个使用在另一个变量中声明的变量将是对进程主权的极大侵犯。

您可以通过使用参数扩展并删除前缀/后缀(例如${parameter#word}${parameter%word}. 有关更多信息,请参阅 Bash 手册。

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

于 2013-03-05T08:04:09.130 回答
1

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

尝试混合语言时,您总是会遇到这类问题。bash一般的提示是在或中写下全部内容awk,两者都非常强大。

于 2013-03-05T08:32:21.637 回答