我正在尝试格式化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"。
答案 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