【问题标题】:Vim - how to pass argument to awk commandVim - 如何将参数传递给 awk 命令
【发布时间】:2017-11-02 00:03:10
【问题描述】:

我有以下简单的 csv 文件:

sno, name , age, gender
1 , abc, 30, M
2 , xyz, 60, F
3, def, 30, M

我想使用 awk 来查找给定列的平均值。我试过以下代码:

command -nargs=1 Colmean %!awk -F',' '{ total += $<args>} END { print total/(NR-1)}'  

按如下方式使用:

:Colmean 3

但是,参数 '3' 没有被传递给 awk 命令。使用双引号代替单引号也不起作用。

问题出在哪里,如何解决?谢谢。

【问题讨论】:

  • 为什么要在编辑器中而不是简单地从命令行执行此操作?
  • 或许更简单,边看文件边分析。
  • 使用 Excel 或类似工具会更容易、更清晰。只是说......
  • 你的命令非常适合我。您是否尝试过不使用插件:$ vim -Nu NONE?你的 awk 命令在 Vim 之外工作吗?直接在 Vim 的命令行模式下?
  • 是的,它在使用-Nu NONE 选项运行时有效。可能是什么原因?什么样的设置可能会导致此错误?

标签: vim awk


【解决方案1】:

注意,这里不需要 awk:

command! -range=% -nargs=1 ColMean echo eval(join(map(getline(<line1>,<line2>), 'split(v:val, ", ")[<args>]'), '+')) / (<line2>-<line1>+1.0)

回到您的问题,命令映射可能会改变您实际执行的内容。您可以在缓冲区上尝试:debug 2,$ColMean 3 看看发生了什么。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 1970-01-01
    • 2018-04-02
    相关资源
    最近更新 更多