在 awk 中重复格式说明符

Repeating the format specifiers in awk

我正在尝试格式化 AWK 的 printf() 函数的输出。更准确地说,我正在尝试打印一个具有很长行的矩阵,我想将它们包装起来并在下一行继续。我正在尝试做的是使用 Fortran 的最佳说明。考虑以下 Fortran 语句:

 write(*,'(10I5)')(i,i=1,100)

输出将是 1:100 范围内的整数,每行 10 个元素。

是否可以在 AWK 中做同样的事情。我可以通过偏移索引并使用“\n”打印到新行来做到这一点。问题是这是否可以像在 Fortran 中那样以优雅的方式完成。

谢谢,

按照评论中的建议,我想解释一下我的 Fortran 代码,如上例所示。

     (i,i=1,100) ! => is a do loop going from 1 to 100
     write(*,'(10I5)') ! => is a formatted write statement 
     10I5 says print 10 integers and for each integer allocate 5 character slot

诀窍是,当超过格式化写入给出的 10 x 5 字符槽时,就会跳到下一行。所以不需要尾随的“\n”。

这可能对你有帮助

[akshay@localhost tmp]$ cat test.for

    implicit none
    integer i
    write(*,'(10I5)')(i,i=1,100)
    end

[akshay@localhost tmp]$ gfortran test.for

[akshay@localhost tmp]$ ./a.out 
    1    2    3    4    5    6    7    8    9   10
   11   12   13   14   15   16   17   18   19   20
   21   22   23   24   25   26   27   28   29   30
   31   32   33   34   35   36   37   38   39   40
   41   42   43   44   45   46   47   48   49   50
   51   52   53   54   55   56   57   58   59   60
   61   62   63   64   65   66   67   68   69   70
   71   72   73   74   75   76   77   78   79   80
   81   82   83   84   85   86   87   88   89   90
   91   92   93   94   95   96   97   98   99  100

[akshay@localhost tmp]$ awk 'BEGIN{for(i=1;i<=100;i++)printf("%5d%s",i,i%10?"":"\n")}'
    1    2    3    4    5    6    7    8    9   10
   11   12   13   14   15   16   17   18   19   20
   21   22   23   24   25   26   27   28   29   30
   31   32   33   34   35   36   37   38   39   40
   41   42   43   44   45   46   47   48   49   50
   51   52   53   54   55   56   57   58   59   60
   61   62   63   64   65   66   67   68   69   70
   71   72   73   74   75   76   77   78   79   80
   81   82   83   84   85   86   87   88   89   90
   91   92   93   94   95   96   97   98   99  100