Arrays 具有多个值的awk多维数组

Arrays 具有多个值的awk多维数组,arrays,multidimensional-array,awk,Arrays,Multidimensional Array,Awk,我正在尝试按照现有的解决方案进行打印 https://stackoverflow.com/questions/17692771/awk-sort-multidimensional-array/17706399#17706399 awk 'BEGIN { a[1][1] = "UP-H" a[1][2] = "RRR8" a[1][3] = "85554" a[1][4] = "H55"

我正在尝试按照现有的解决方案进行打印

https://stackoverflow.com/questions/17692771/awk-sort-multidimensional-array/17706399#17706399

awk 'BEGIN {
    a[1][1] = "UP-H"
    a[1][2] = "RRR8"
    a[1][3] = "85554"
    a[1][4] = "H55"
    a[2][1] = "MM"
    a[2][2] = "454"
    a[2][3] = "X222"
    a[2][4] = "X77a"

    for (i=1; i in a; i++)
        for (j=1; j in a[i]; j++)
            printf "a[%d][%d] = %s\n",i,j,a[i][j]}'
        
将打印

a[1][1] = UP-H
a[1][2] = RRR8
a[1][3] = 85554
a[1][4] = H55
a[2][1] = MM
a[2][2] = 454
a[2][3] = X222
a[2][4] = X77a

...
a[3][0] = asdf ...
....
但是如何循环该数组,以便将该数组与生成/添加的文本一起漂亮地打印出来,格式如下

TEXT1 UP-H TEXT2 RRR8 TEXT3 85554 TEXT4 H55
TEXT1 MM   TEXT2 454  TEXT3 X222  TEXT4 X77a
我不知道如果我让别人说什么是最好的方法。
带有多个值UP-H、rrr885554、H55的数组“a”

您可以使用此
awk
脚本:

cat prnt.awk

BEGIN {
    a[1][1] = "UP-H"
    a[1][2] = "RRR8"
    a[1][3] = "85554"
    a[1][4] = "H55"
    a[2][1] = "MM"
    a[2][2] = "454"
    a[2][3] = "X222"
    a[2][4] = "X77a"

   for (i=1; i in a; i++) {
       len = length(a[i])
       for (j=1; j <= len; j++)
           printf "TEXT1%d %s%s", j, a[i][j], (j<len?"\t":"\n")
   }
}

你的问题不清楚,但这可能就是你想要的:

$ cat tst.awk
BEGIN {
    a[1][1] = "UP-H"
    a[1][2] = "RRR8"
    a[1][3] = "85554"
    a[1][4] = "H55"
    a[2][1] = "MM"
    a[2][2] = "454"
    a[2][3] = "X222"
    a[2][4] = "X77a"

    OFS = "\t"
    split("TEXT1 ANOTHERTXT THREE ASDF",strs)
    for (i=1; i in a; i++) {
        for (j=1; j in a[i]; j++) {
            printf "%s%s %s", (j>1 ? OFS : ""), strs[j], a[i][j]
        }
        print ""
    }
}


你好TEXT1 text2text3text4我的意思是为了说明,是否可以调整TEXT1将保持不变,TEXT2实际上是例如AAA,TEXT2是BBBB等。。或者我需要像EdMorton提到的那样,为每个文本1..4运行多个子系统,在那里放置另一个自定义文本字符串,除了您有这些字符串之外,例如
TEXT1,TEXT2,TEXT3,TEXT4
etc已经在某个数组或变量中了吗?@ya801听起来你需要更新你的问题,以澄清你想要的是什么,并提供更具代表性的示例输出。@anubhava
TEXT1,TEXT2,TEXT3,TEXT4
就是要添加的任何文本,比如
TEXT1,另一个text,三,ASDF
事实上,我的意思是,像这样没问题,更新您的问题以澄清您想要的是什么,并提供更具代表性的示例输出。
TEXT11 UP-H TEXT12 RRR8 TEXT13 85554  TEXT14 H55
TEXT11 MM   TEXT12 454  TEXT13 X222   TEXT14 X77a
$ cat tst.awk
BEGIN {
    a[1][1] = "UP-H"
    a[1][2] = "RRR8"
    a[1][3] = "85554"
    a[1][4] = "H55"
    a[2][1] = "MM"
    a[2][2] = "454"
    a[2][3] = "X222"
    a[2][4] = "X77a"

    OFS = "\t"
    split("TEXT1 ANOTHERTXT THREE ASDF",strs)
    for (i=1; i in a; i++) {
        for (j=1; j in a[i]; j++) {
            printf "%s%s %s", (j>1 ? OFS : ""), strs[j], a[i][j]
        }
        print ""
    }
}
$ awk -f tst.awk
TEXT1 UP-H  ANOTHERTXT RRR8 THREE 85554 ASDF H55
TEXT1 MM    ANOTHERTXT 454  THREE X222  ASDF X77a