AWK - 在循环中打印线条?

时间:2012-04-15 14:37:28

标签: for-loop awk

我有这个命令:

$ awk 'BEGIN{c="1"; for(i=NF; i<9; i++) print c++, "_"}'
1 _
2 _
3 _
4 _
5 _
6 _
7 _
8 _
9 _

我希望此命令打印结果:

1 _ _ _ _ _ _ _ _ _
2 _ _ _ _ _ _ _ _ _
3 _ _ _ _ _ _ _ _ _
4 _ _ _ _ _ _ _ _ _
5 _ _ _ _ _ _ _ _ _
6 _ _ _ _ _ _ _ _ _
7 _ _ _ _ _ _ _ _ _
8 _ _ _ _ _ _ _ _ _
9 _ _ _ _ _ _ _ _ _

3 个答案:

答案 0 :(得分:3)

awk '
  BEGIN { 
    for (i=0; i<9; ++i) {
      printf("%d",i+1);
      for (j=0; j<9; ++j) {
        printf(" _");
      }
      printf("\n");
    }
  }
'

答案 1 :(得分:2)

这与Vaughn的答案类似,但如果这很重要,可能会快一点。

awk 'BEGIN { str = ""; for (i = 1; i <= 9; i++) str = str" _";
             for (i = 1; i <= 9; i++) printf("%d%s\n", i, str) }'

答案 2 :(得分:1)

为什么要编写代码来生成一个简单的小文本呢?

您已经拥有了所需的输出,因为您输入了它。只需使用那段文字。

以下shell脚本直接来自您的预期输出:

cat <<EOF
1 _ _ _ _ _ _ _ _ _
2 _ _ _ _ _ _ _ _ _
3 _ _ _ _ _ _ _ _ _
4 _ _ _ _ _ _ _ _ _
5 _ _ _ _ _ _ _ _ _
6 _ _ _ _ _ _ _ _ _
7 _ _ _ _ _ _ _ _ _
8 _ _ _ _ _ _ _ _ _
9 _ _ _ _ _ _ _ _ _
EOF