【问题标题】:Awk: formatted print of varying number of elementsawk:不同数量元素的格式化打印
【发布时间】:2017-09-30 13:17:18
【问题描述】:

我想打印具有不同数量元素的记录,或者,例如,一个锯齿状数组。元素类型是 %s 后跟不确定数量的 %d。

示例输入、伪代码、所需输出:

$ echo "abc 1 2 3 4 5
  def 8 9
  sometext 5000 23 4 34 56 112" |
awk '{printf "% 10s % 5d % 5d*.......", <each element>'
$        abc     1     2     3     4     5
         def     8     9
    sometext  5000    23     4    34    56   112

% 5d*.......如何指定重复格式子串?

&lt;each element&gt;每个元素如何声明?

是否存在与 C 的 vprintf 等效的 (g)awk 或说 printf "%s *%d" el for el in array,其中 %d 说明符自动重复正确的次数。

我在谷歌上找不到任何令我惊讶的东西。我无法想象我是第一个想要以非常格式化的方式打印锯齿状数组的人。

【问题讨论】:

标签: arrays awk printf formatted


【解决方案1】:
echo "abc 1 2 3 4 5
  def 8 9
  sometext 5000 23 4 34 56 112" | 
awk '{printf "%10s", $1 OFS; 
      for(i=2;i<=NF;i++) printf "%5d", $i OFS;
      print ""}'



      abc     1    2    3    4    5
      def     8    9
 sometext  5000   23    4   34   56  112

【讨论】:

    【解决方案2】:
    $ echo "abc 1 2 3 4 5
      def 8 9
      sometext 5000 23 4 34 56 112" |
    awk '{printf "%10s", $1; for (i=2;i<=NF;i++) printf "%s%5d", OFS, $i; print ""}'
           abc     1     2     3     4     5
           def     8     9
      sometext  5000    23     4    34    56   112
    

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-15
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多