Unix excel是否可以执行cmd命令,然后将输出放在单元格中?

Unix excel是否可以执行cmd命令,然后将输出放在单元格中?,unix,excel,cmd,gnu,vba,Unix,Excel,Cmd,Gnu,Vba,这就是我要做的。我有一个程序执行时间的日志文件。通常,如果我想快速找到一个程序的函数已经执行了多少个条目,平均/最大执行是使用grep、gawk、wc、sort和uniq的组合 i、 e。 最大执行时间: grep "Execution time " console.log | gawk "{print "$8", "$11"}" | grep "[FUNC NAME]" | gawk "{print "$1"}" | gawk "max==0 || $1 > max{max=$1}END

这就是我要做的。我有一个程序执行时间的日志文件。通常,如果我想快速找到一个程序的函数已经执行了多少个条目,平均/最大执行是使用grep、gawk、wc、sort和uniq的组合

i、 e。 最大执行时间:

grep "Execution time " console.log | gawk "{print "$8", "$11"}" | grep "[FUNC NAME]" | gawk "{print "$1"}" | gawk "max==0 || $1 > max{max=$1}END{print max}"
我想知道的是提取日志文件中找到的所有函数max/average execution time和events,并将数据放入excel文件中。我希望格式如下:

(我在命令提示符下手动执行此操作以获取这些值)


如何在Excel的VBA中执行这些操作?

经过一些搜索和反复尝试,我终于在Excel VBA中实现了我想要的功能

我是这样解决的:

我创建了3个名为CustomMax、CustomAve、CustomCount的自定义函数

下面是CustomMax的示例代码:(注意,我硬编码了文件的路径名,但您可以自己设置)

CustomMax:

Function CustomMax(var1 As String)

Dim s As Long, a() As String
s = CreateObject("Wscript.Shell").Exec("cmd.exe /c" & "grep ""Execution time "" ""C:/Users/MDuh/AppData/Local/Red 5 Studios/Firefall/console.log"" | gawk ""{print ""$8"", ""$11""}"" | grep -w """ & var1 & """| gawk ""{print ""$1""}"" | gawk ""max==0 || $1 > max{max=$1}END{print max}""").StdOut.ReadLine
CustomMax = s

End Function
这将创建一个shell对象,并使用以下命令执行命令行:

grep "Execution time " console.log | gawk "{print "$8", "$11"}" | grep -w "[NAME]" | gawk "{print "$1"}" | gawk "max==0 || $1 > max{max=$1}END{print max}"
然后使用Stdout.ReadLine捕获输出。需要s变量,因此工作表中的输出是数字,而不是字符串

该方法的一些警告如下:

  • 每次函数调用都会打开一个CMD提示符,然后突然将其关闭
  • 它将在您每次执行更新工作表的操作时重新计算,因此您可能希望手动设置重新计算

是否要通过Wine在Linux上运行Excel?或者通过Cygwin在Windows上运行Linux工具?或者只是将现有文本文件的内容(例如,
*.csv
)读入Excel?我正在通过GnuWin和Unixtoolsoval在windows中运行linux工具。通常,您可以先运行命令,将输出重定向到文件(使用Google:
站点:stackoverflow.com vba wscript.shell
),然后读取和解析文本文件(使用Google:
site:stackoverflow.com excel vba读取文本文件
)并将值分布在整个工作表中(Google:
site:stackoverflow.com excel vba设置单元格值
可以给您一些提示)。一旦您准备好一些代码,将其添加到问题中,您可能会得到一些更精确的答案