【问题标题】:awk - Does gawk have anything like the __LINE__ macro?awk - gawk 有类似 __LINE__ 宏的东西吗?
【发布时间】:2013-10-22 12:17:27
【问题描述】:

我正在使用 gawk,我想知道是否可以输出脚本的行。我查看了 gawk 的手册并找到了有关 auto-set variables 的信息,但没有列出像 __LINE__ 这样的信息。谢谢

在这里澄清一下,我的意思是 awk 脚本的实际行,而不是我正在阅读的输入。所以如果我这样做cat foo | script.awk 我正在寻找script.awk 中的行号。如果可能的话,基本上我想在我的脚本中显示发生错误的行号。

【问题讨论】:

  • awk-interpreter 非常擅长告诉您在哪一行发生了错误,例如awk: avg.awk:20: ^ syntax error。你会用这个做什么?
  • @Fredrik 我不关心那些错误,我的意思是我的脚本中的错误我必须做print "exiting on error!"; exit 1;
  • 将退出代码更改为唯一的代码,这样您就可以通过搜索来轻松识别该行,例如exit 42。 Shell 将每个大于 0 的退出代码解释为失败,因此您的所有 &&||$? 都将按预期工作。
  • 你试过 dgawk,GNU awk 4.x 中的集成调试器吗?
  • @Fredrik 谢谢,但我正在寻找可以自动获取行号的东西。我有很多地方程序可能会因错误而终止。

标签: awk gawk


【解决方案1】:

不,它没有。如果您需要解决方法的建议,请告诉我们,例如从原始 awk 脚本创建一个新的 awk 脚本:

$ cat tst.sh
tmp="/usr/tmp/tmp.awk"
trap 'rm -f "$tmp"; exit' 0
> "$tmp"
chmod oug+x "$tmp"

awk '{ sub(/__LINE__/,NR); print }' <<! > "$tmp" && "$tmp"
awk 'BEGIN {
    print "this is line", __LINE__
    print "this is line", __LINE__
    print "this is line", __LINE__
}'
!
$ ./tst.sh
this is line 2
this is line 3
this is line 4

【讨论】:

  • 不幸的是,这看起来是正确的答案。有趣的解决方法!
猜你喜欢
  • 1970-01-01
  • 2017-07-15
  • 2014-09-22
  • 2010-11-29
  • 2020-03-26
  • 2011-10-18
  • 2023-03-09
  • 2011-04-04
  • 1970-01-01
相关资源
最近更新 更多