scanf,awk 中的反向引用

发布于 2024-09-11 14:20:32 字数 126 浏览 2 评论 0原文

awk(POSIX) 中是否有 scanf()(如 C 语言)的实现?

我知道 awk 没有像 sed 和 perl 那样的反向引用。 在 awk 中模拟最简单的方法是什么?

谢谢尼安

Is there any implementation of scanf()(like in C) in awk(POSIX)?

I know that awk does not have back reference like in sed and perl.
What is the easiest way to simulate in awk?

Thanks

Nyan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守望孤独 2024-09-18 14:20:32

sprintf() 、 printf() 可能就是您正在寻找的。 awk 不支持反向引用,但是 gawk 的 gensub() 甚至 gsub() 可以提供反向引用。

反向引用只是存储匹配的字符串。因此,利用 awk 的功能来区分字段和字段分隔符,使用其内部变量(如 OFS、FS、ORS 等)是可行的方法。例如,

$ echo "test.txt" | sed 's/\(.*\).txt/\1.pdf/'
test.pdf

$ echo "test.txt" | awk -F"." '{$NF="pdf"}1' OFS="."
test.pdf

当然,这只是一个简单的示例。但你明白了。

sprintf() , printf() may be what you are looking for. awk does not support backreferences however gawk's gensub(), or even gsub() can provide backreferences.

Backreferences are just storing the strings that are matched. So, making use of awk's capability to differentiate fields and field delimiters, using its internal variables like OFS,FS,ORS etc are the way to go.. eg

$ echo "test.txt" | sed 's/\(.*\).txt/\1.pdf/'
test.pdf

$ echo "test.txt" | awk -F"." '{$NF="pdf"}1' OFS="."
test.pdf

Of course, this is just a simple example. But you get the idea.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文