【问题标题】:Using Array inside and outside AWK statement在 AWK 语句内部和外部使用 Array
【发布时间】:2014-07-11 17:49:59
【问题描述】:

我想将用户的输入存储在 AWK 语句内的数组中,然后在 AWK 语句外显示该数组的元素。 问题是我无法在 AWK 之外显示数组元素 这是代码:

declare -a data
awk -F" " ' 
BEGIN{
cmd="read a; echo $a"
}
{
        i=1;
        NR==1;
        while(i<=NF)
        {
        print $i
        printf "Please Enter " $i ":  "
        cmd|getline input
        close(cmd)
        **data[$i]=input**
        print data[$i] 
        print  $i,NF 
        i++
        }
}
' basic_data

#Here I want to display array elements but i get nothing:

echo  ${data[@]}

感谢您的支持 在此先感谢:)

【问题讨论】:

  • Bash 和 awk 是不同的进程。他们不可能访问和修改彼此的数据。
  • basic_data 中有什么内容?
  • 看起来您对 shell 和 awk 的用途非常困惑,因为您尝试将 awk 用于应该使用 shell 的事情,然后尝试在 awk 中填充 shell 数据结构脚本。如果您告诉我们您要做什么会更好,并带有示例输入/输出,这样我们就可以为您指明正确的方向。
  • 亲爱的,我要做的是让用户根据存储在“basic_data”文件中的字段插入数据,例如,存储在基本数据文件中的数据是 Id 和 Name 所以t'm使用条件为“NR=1”的 AWK 获取字段,然后让用户根据它们插入数据并将它们存储在一个数组中,以便我可以对它们进行一些验证。希望现在我们在同一页面上:) .... 谢谢

标签: arrays bash shell awk


【解决方案1】:

要将变量的值传递给awk,您可以使用-v 开关将其分配给awk 变量。要将来自awk 的数据接收回变量中,您可以使用命令替换。

$ a=aaa
$ b=($(awk -va="$a" 'BEGIN{for(i=1;i<=3;i++) {printf("%s%d\n", a, i)}}'))
$ for x in "${b[@]}"; do echo "$x"; done
aaa1
aaa2
aaa3

【讨论】:

    【解决方案2】:

    你可以这样做:

    array=($(awk 'BEGIN{print "first";print "second"}')) 
    
    echo ${array[0]}
    first
    echo ${array[1]}
    second
    

    但我不确定这是否是您的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-11
      • 2014-09-13
      • 2016-10-30
      • 1970-01-01
      相关资源
      最近更新 更多