【发布时间】:2016-09-20 13:08:52
【问题描述】:
如果匹配或返回原始行,我正在尝试让 awk 更改给定的模式。这是我的代码
printf 'hello,"hru, bro"\nhi,bye\n' | gawk 'match($0, /"([^"]+)"/, m) {if (m[1] == "") {print $0} else {print gsub(/,/,"",m[1])}}'
-> 1
我希望 `match 返回 m[1] 中的匹配模式,并且 gsub 在匹配时替换 m[1] 中的所有 ','。因此结果应该是
-> hello,hru bro\nhi,bye
我在这里缺少什么?
更新
根据 Tom 的评论,我将 gsub 替换为 gensub,但我现在得到以下结果:
-> gawk: cmd. line:1: (FILENAME=- FNR=1) warning: gensub: third argument `hru, bro' treated as 1
hello"hru, bro"
【问题讨论】:
-
好的,谢谢,我应该检查文档并改用
gensub。所以我删除了这个问题,因为它很愚蠢。 -
其实并没有解决问题,我已经相应地更新了我的帖子。
-
您现在向 gensub() 传递了错误的参数,就像警告消息告诉您的那样,但是由于您没有向我们展示该代码,因此我们无法告诉您更多信息。
-
看起来您正在尝试使用 CSV 文件。当您正在学习时,它们可能会非常棘手。我建议使用具有经过测试的 CSV 库的语言。 Perl 和 Ruby 浮现在脑海中。