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