【问题标题】:is there a way to make awk keep track of changes that it makes有没有办法让 awk 跟踪它所做的更改
【发布时间】:2012-11-29 07:36:36
【问题描述】:

我想知道是否有办法让 awk 输出它所做的更改数量,或者以某种方式跟踪它所做的更改。例如,如果有一个 .csv 文件,其中我使用 awk 将单词“the”替换为“it”,是否有办法让 awk 输出它找到并替换了“the”内部的次数.csv 文件?我一直在谷歌+这个网站的其余部分上搜索,但没有找到任何东西,不确定我是否只是以错误的方式工作或类似的东西,如果有人可以帮助我解决这个问题非常感谢,谢谢!

【问题讨论】:

    标签: bash csv awk


    【解决方案1】:

    据我所知,awk 无法自动计算替换值。我们必须以某种方式手动对数字求和。例如,用你的“the”->“it”:

    gawk '{x+=gsub("the","it");print} END{print "total changes:"x}' file.csv
    

    【讨论】:

    • +1 这是对已发布问题的正确答案,所以如果这不是 OP 想要的,那么他需要改写问题并提供一些示例输入和预期输出。
    • 完美运行,谢谢!就像它如何使用 gsub 一样,正计划使用它,但不确定如何实现计数部分
    【解决方案2】:

    每当您在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      • 1970-01-01
      相关资源
      最近更新 更多