【问题标题】:awk multidimensional array with multiple values具有多个值的 awk 多维数组
【发布时间】:2020-10-13 16:32:09
【问题描述】:

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

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

我不知道什么是最好的方法,如果我让说例如 具有多个值的数组“a” UP-H,RRR8,85554,H55

【问题讨论】:

    标签: arrays multidimensional-array awk


    【解决方案1】:

    您的问题不清楚,但这可能是您正在寻找的:

    $ 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
    

    【讨论】:

      【解决方案2】:

      您可以使用这个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")
         }
      }
      

      运行如下:

      awk -f prnt.awk
      
      TEXT11 UP-H TEXT12 RRR8 TEXT13 85554  TEXT14 H55
      TEXT11 MM   TEXT12 454  TEXT13 X222   TEXT14 X77a
      

      【讨论】:

      • 你好 TEXT1 TEXT2 TEXT3 TEXT4 我的意思是为了说明目的是否可以调整 TEXT1 将保留,TEXT2 实际上是例如AAA,TEXT2 是 BBBB 等。或者我需要在 EdMorton 提到的之后为每个 TEXT1..4 运行多个子,以便将另一个自定义文本字符串放在那里
      • 你有这些字符串吗? TEXT1, TEXT2, TEXT3, TEXT4 etc 已经在某个数组或变量中了吗?
      • @ya801 听起来您需要更新您的问题以阐明您想要什么并提供更具代表性的示例输出。
      • @anubhava TEXT1, TEXT2, TEXT3, TEXT4 只是要添加的任何文本,例如 TEXT1,ANOTHERTXT,THREE,ASDF 实际上我的意思是这样
      • 没问题,更新您的问题以阐明您想要什么,并提供更具代表性的示例输出。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-04
      相关资源
      最近更新 更多