代码之家  ›  专栏  ›  技术社区  ›  fedorqui yar

能把Awk的代码打印出来吗?

  •  1
  • fedorqui yar  · 技术社区  · 5 年前

    我经常发现自己在写作 Awk one-liners 随着时间的推移,它变得越来越复杂。

    我知道我总是可以创建一个Awk文件来不断添加用例,但是它肯定不如在命令行上更改文本那么有用。

    对于这一点:有没有什么办法我可以很漂亮地打印Awk的代码,这样我就可以从中获得更多的意义?

    awk 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file
    

    我怎样才能得到更具可读性的东西?

    1 回复  |  直到 5 年前
        1
  •  7
  •   Ed Morton    5 年前

    Ed Morton showed me GNU awk拥有 -o 打印选项:

    GNU Awk User's Guide, on Options


    --漂亮的打印[=文件]

    启用awk程序的漂亮打印。暗示 --no-optimize . 默认情况下,输出程序是在名为 awkprof.out Profiling 文件 参数允许您为输出指定不同的文件名。两条线之间不允许有空隙 -o 文件 ,如果 已提供。

    注意:在过去,这个选项也会执行你的程序。现在已经不是这样了。

    所以这里的关键是 ,带有:

    • 如果我们希望输出自动存储在“awkprof.输出".
    • - 以标准输出。
    • file 将输出存储在名为 文件 .

    现场观看:

    $ gawk -o- 'BEGIN {print 1} END {print 2}'
    BEGIN {
        print 1
    }
    
    END {
        print 2
    }
    

    或:

    $ gawk -o- 'flag{ if (/PAT2/){printf "%s", buf; flag=0; buf=""} else buf = buf $0 ORS}; /PAT1/{flag=1}' file
    flag {
        if (/PAT2/) {
            printf "%s", buf
            flag = 0
            buf = ""
        } else {
            buf = buf $0 ORS
        }
    }
    
    /PAT1/ {
        flag = 1
    }