【发布时间】:2012-11-29 07:36:36
【问题描述】:
我想知道是否有办法让 awk 输出它所做的更改数量,或者以某种方式跟踪它所做的更改。例如,如果有一个 .csv 文件,其中我使用 awk 将单词“the”替换为“it”,是否有办法让 awk 输出它找到并替换了“the”内部的次数.csv 文件?我一直在谷歌+这个网站的其余部分上搜索,但没有找到任何东西,不确定我是否只是以错误的方式工作或类似的东西,如果有人可以帮助我解决这个问题非常感谢,谢谢!
【问题讨论】:
我想知道是否有办法让 awk 输出它所做的更改数量,或者以某种方式跟踪它所做的更改。例如,如果有一个 .csv 文件,其中我使用 awk 将单词“the”替换为“it”,是否有办法让 awk 输出它找到并替换了“the”内部的次数.csv 文件?我一直在谷歌+这个网站的其余部分上搜索,但没有找到任何东西,不确定我是否只是以错误的方式工作或类似的东西,如果有人可以帮助我解决这个问题非常感谢,谢谢!
【问题讨论】:
据我所知,awk 无法自动计算替换值。我们必须以某种方式手动对数字求和。例如,用你的“the”->“it”:
gawk '{x+=gsub("the","it");print} END{print "total changes:"x}' file.csv
【讨论】:
每当您在 awk 脚本中将“the”替换为“it”时,都会增加一个计数器。然后通过将计数器放在 END 块中来打印 awk 脚本末尾的计数器。
一个简单的例子,您只是在第 1 列中替换“the”:
awk 'BEGIN{FS=OFS=","}
{if ($1 == "the") {$1 = "it"; counter++; print}}
END{print counter}' input.csv
但是您要做的只是简单地计算单词/模式“the”在原始 .cvs 文件中出现的次数,您可以简单地这样做:
grep -c "the" input.csv
或取决于您的 .csv 格式:
grep -c " the," input.csv
【讨论】: