我的问题是,是否可以在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]
并且它不起作用。
任何帮助都将不胜感激。
干杯!
答案 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)导出数组。
尝试混合语言时,您总会遇到这些问题。一般提示是在bash
或awk
中编写整个批次,两者都非常强大。