【问题标题】:Why does removing `END{print ""}` not print the last line?为什么删除 `END{print ""}` 不打印最后一行?
【发布时间】:2016-01-09 08:01:02
【问题描述】:

我正在阅读来自https://stackoverflow.com/a/34685332/156458 的示例

$ seq 5 | awk '{printf "%s%s",sep,$0; sep=",\n"} END{print ""}'
1,
2,
3,
4,
5

我认为END{print ""}是多余的,所以

$ seq 5 | awk '{printf "%s%s",sep,$0; sep=",\n"} '
1,
2,
3,
4,

为什么删除END{print ""} 不打印最后一行?

【问题讨论】:

    标签: awk


    【解决方案1】:

    因为您要删除{print ""},它有效地打印了一个新行。

    5 应该出现在您的提示符之前,但是您的 shell 可能不允许这样做,而只是将它们一起丢弃。

    $ seq 5 | awk '{printf "%s%s",sep,$0; sep=",\n"} END{print ""}' 打印:

    1,
    2,
    3,
    4,
    5
    $>
    

    $ seq 5 | awk '{printf "%s%s",sep,$0; sep=",\n"} 打印:

    1,
    2,
    3,
    4,
    5$>
    

    【讨论】:

    • 为什么{printf "%s%s",sep,$0; sep=",\n"} 不打印最后一行?
    【解决方案2】:

    如何让它更简单:

    seq 5 | awk -v RS="\0" -v OFS=",\n" '{$1=$1}7'
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-13
    • 2020-10-21
    • 2023-02-26
    • 2011-08-15
    • 2020-12-05
    • 2022-12-20
    相关资源
    最近更新 更多