重复awk

时间:2015-06-17 11:02:15

标签: awk printf gawk

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

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

输出将是以10个元素的行打印的1:100范围内的整数。

是否可以在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"。

1 个答案:

答案 0 :(得分:2)

这可能对您有所帮助

[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