【问题标题】:Printing pattern in unix using awk使用 awk 在 unix 中打印模式
【发布时间】:2018-09-28 21:11:12
【问题描述】:

需要根据文件中存在的字段数据使用 awk 打印日志文件。示例日志文件数据--

Joe,4
Tony,2
Peter,5

所需的输出 (第一个字段为 c---c--

Joe,c0,c1,c2,c3
Tony,c0,c1
Peter,c0,c1,c2,c3,c4

【问题讨论】:

  • 欢迎来到 SO,请始终尝试在您的帖子中展示您的努力,也将您的示例包装在代码标签中。

标签: unix awk printing


【解决方案1】:

请您尝试关注一下。

awk 'BEGIN{FS=OFS=","} {printf $1 OFS;k="";for(i=1;i<=$NF;i++){printf("%s%s","c"k++,i==$NF?ORS:OFS)}}'  Input_file

【讨论】:

    【解决方案2】:

    另一个awk,也许是最短的……

    $ awk -F, '{f="";while($2--)f=FS"c"$2f;print $1f}' file
    
    Joe,c0,c1,c2,c3
    Tony,c0,c1
    Peter,c0,c1,c2,c3,c4
    

    【讨论】:

      【解决方案3】:
      $ awk 'BEGIN{FS=OFS=","}{printf $1; for(i=0; i<$2; i++)printf("%sc%d",OFS, i ); print ""}' file
      Joe,c0,c1,c2,c3
      Tony,c0,c1
      Peter,c0,c1,c2,c3,c4
      

      解释

      awk 'BEGIN{
            FS=OFS=","                       # set i/p and o/p field separator
           }
           {
            printf $1;                       # print first field
            for(i=0; i<$2; i++)              # loop from 0 to value in second field
                  printf("%sc%d",OFS, i );   # printf format string
            print ""                         # finally print newline char
           }
          ' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-04
        • 2012-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-06
        相关资源
        最近更新 更多