[英]Access a bash array in awk loop
我有一个bash数组
myarray = (1 2 3 4 5 ... n)
另外,我正在读取仅输入一行的文件,例如:
1 2 3 4 5 ... n
我正在逐行将其读取为数组并使用以下命令进行打印:
awk 'BEGIN{FS=OFS="\t"}
NR>=1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<NF;i++) print OFS a[i]}' myfile.txt
myarray
的大小与同a
。 现在myarray
开始与指数0
和a
带有指数1
。 我的主要问题是如何将bash数组传递给awk表达式,以便可以在带有相应元素的打印循环内使用它。 所以我尝试的是:
awk -v array="${myarray[*]}"
'BEGIN{FS=OFS="\t"}
NR>=1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<NF;i++) print OFS a[i] OFS array[i-1]}' myfile.txt
但是,这不起作用。 我没有任何输出myarray
。 在此示例中,我想要的输出将是:
1 1
2 2
3 3
4 4
5 5
...
n n
据我了解,您只需要以正确的方式为abk数组提供awk
。 也就是说,通过使用split()
:
awk -v bash_array="${myarray[*]}"
'BEGIN{split(bash_array,array); FS=OFS="\t"}
NR>=1{for (i=1;i<=NF;i++) a[i]+=$i}
END{for (i=1;i<NF;i++) print a[i], array[i]}' file
由于array[]
现在位于awk
,因此您不必关心索引,因此可以正常调用它们,而不必担心bash中的索引从0
开始。
还要注意的是print a,b
是相同的(和清洁剂)作为print a OFS b
,既然你已经定义OFS
在BEGIN
块。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.