Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 用awk存储多维数组_Bash_Unix_Awk - Fatal编程技术网

Bash 用awk存储多维数组

Bash 用awk存储多维数组,bash,unix,awk,Bash,Unix,Awk,我的输入文件是 a|b|c|d w|r|g|h 我想将值存储在数组中,如下所示 a[1,1] = a a[1,2] = b a[2,1] = w 请以任何方式建议在awk bash中实现这一点 我有两个I/p文件,需要进行字段级验证。这会将文件解析为awk数组: awk -F \| '{ for(i = 1; i <= NF; ++i) a[NR,i] = $i }' filename awk-F\|'{for(i=1;i像这样 awk -F'|' '{for(i=1;i<=N

我的输入文件是

a|b|c|d
w|r|g|h
我想将值存储在数组中,如下所示

a[1,1] = a
a[1,2] = b
a[2,1] = w
请以任何方式建议在awk bash中实现这一点


我有两个I/p文件,需要进行字段级验证。

这会将文件解析为awk数组:

awk -F \| '{ for(i = 1; i <= NF; ++i) a[NR,i] = $i }' filename
awk-F\|'{for(i=1;i像这样

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

awk-F'|'{for(i=1;i你真的想得到/使用gawk 4.*如果你使用多维数组,那是唯一支持它们的awk。当你写:

a[1,2]
在任何awk中,您实际上都在创建一个psedudo多维数组,它是一个一维数组,由

1 SUBSEP 2
其中subsp是一个不太可能出现在输入中的控制字符

在GNU awk 4*中,您可以执行以下操作:

a[1][2]
(注意不同的语法)并填充实际的多维数组

请尝试以下操作以查看差异:

$ cat tst.awk
BEGIN {
    SUBSEP=":"  # just to make it visible when printing

    oneD[1,2] = "a"
    oneD[1,3] = "b"

    twoD[1][2] = "c"
    twoD[1][3] = "d"

    for (idx in oneD) {
        print "oneD", idx, oneD[idx]
    }
    print ""

    for (idx1 in twoD) {
        print "twoD", idx1
        for (idx2 in twoD[idx1]) {      # you CANNOT do this with oneD
            print "twoD", idx1, idx2, twoD[idx1][idx2]
        }
    }
}
$ awk -f tst.awk
oneD 1:2 a
oneD 1:3 b

twoD 1
twoD 1 2 c
twoD 1 3 d

我知道这并不是你所要求的,但是当你开始使用bash/awk数组时,我开始认为是时候开发功能更全面的脚本语言了。你有没有理由不想使用perl或python呢?@Sobrique使用perl或python的时候,你需要做的不仅仅是操作文本,否则就是标准的UNIX工具能够以简洁、高效和便携的方式完成工作。