【问题标题】:AWK: Assign a variable to each fieldAWK:为每个字段分配一个变量
【发布时间】:2017-02-09 18:28:25
【问题描述】:

我需要为每个字段分配一个变量,以便稍后生成 HTML。 我的数据文件如下所示:

field1;field2;field3                # << RECORD 1
this;is;second;record               # << RECORD 2

有没有办法根据记录号为每条记录生成一个数组?像arrayNR,所以:

array1[0] = "field1"; array1[1] = "field2"; 
     ^ record number
array2[0] = "this"; array2[1] = "is"; array2[2] = "second"; array2[3] = "record"
     ^ record number

【问题讨论】:

  • 如果你需要使用标准的awk,将每一行分配给数组,并在需要时再次拆分它是不是没有意义?或者只是用“2:3”之类的键构建一个关联数组来识别第二行的第三个值。如果你需要这个,我可以发布一个详细的答案,但我推荐的解决方案是从 Awk 切换。

标签: arrays variables unix awk


【解决方案1】:

使用 GNU awk,您可以拥有多维数组:

gawk -F\; '{for(i=1;i<=NF;i++)a[NR][i]=$i}END {for(i in a) for (j in a[i]) print a[i][j]}' file

您可以使用其他 awk:

awk -F\; '{for(i=1;i<=NF;i++)a[NR,i]=$i}END {for(i in a) {split(i,b,SUBSEP); print a[b[1],b[2]]}}' file

【讨论】:

    【解决方案2】:

    使用Gnu awk 多维数组和split,例如:

    $ awk '{array[NR][1]; split($0,array[NR],";"); for(i in array[NR]) print array[NR][i]}' file
    
    {
        array[NR][1]               # initiate array
        split($0,array[NR],";")    # split to array
            for(i in array[NR])    # iterate thru all array elements
                print array[NR][i] # output array value
    }
    

    【讨论】:

    • +1,用于 array[NR][1] 在 split 命令之前初始化数组的技巧。否则拆分抱怨second argument is not an array
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多