【问题标题】:Adding columns with awk. What is wrong with this awk command?使用 awk 添加列。这个 awk 命令有什么问题?
【发布时间】:2012-04-06 23:21:57
【问题描述】:

我想将两列添加到大约 10,000 列的文件中。我想在每一行插入 nr 22 作为第一列。然后我想要原始的第一列作为第二列,然后作为第三列我想插入行 nr (NR),然后我想要打印其余的原始列。我认为我可以使用以下 awk 行来做到这一点:

awk '{print 22, $1, NR; for(i=2;i<=NF;++i) print $i}' file

它很好地打印了前三列 (22, $1, NR),但是之后,每个值都有一个新行开始,所以文件打印如下:

22 $1 NR
$2
$3
$4
etc...

代替:

22 $1 NR $2 $3 $4 etc...

我做错了什么?

【问题讨论】:

    标签: awk


    【解决方案1】:

    使用printf 怎么样,因为print 添加了一个换行符。

    awk '{printf("%d, %d, %d, ", 22, $1, NR); for(i=2;i<=NF;++i) printf("%d, ", i)}' file
    

    或者您可以使用ORSOFS输出记录分隔符输出字段分隔符。通常,您将它们添加到 BEGIN 语句中,如下所示:

    awk 'BEGIN { ORS = " " } {print 22, $1, NR; for(i=2;i<=NF;++i) print $i}{print "\n"}' file 
    

    请注意,需要一个额外的printf "\n",否则所有内容都将在一行中结束...

    阅读更多gawk manual output separators

    【讨论】:

      【解决方案2】:

      要对输出格式进行比print(默认打印换行符)提供的更精确的控制,请使用printf

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-09
        • 1970-01-01
        • 2020-12-10
        • 1970-01-01
        相关资源
        最近更新 更多