Awk命令与Powershell等效

时间:2015-05-07 20:06:37

标签: powershell awk

我希望你能帮助我,基本上,我正在寻找与awk命令相同的Powershell:

awk '/"Box11"/ { print $0 }' test.txt|awk '{ SUM += $4} END { print SUM} '

2 个答案:

答案 0 :(得分:4)

这样做有多种方法,但这样做可以解决问题:

Get-Content c:\temp\test.txt | Where-Object{$_ -match '"Box11"'} |
  ForEach-Object{($_ -split "\s+")[3]} | Measure-Object -Sum |
  Select-Object -ExpandProperty Sum

获取文件的字符串数组。对于包含字符串"Box11"的每一行,我们在每组空格上分割线。然后将每个匹配的4个元素传递给Measure-Object

简而言之,如果你重视,看起来像这样:

gc c:\temp\test.txt | ?{$_ -match '"Box11"'} | %{($_ -split "\s+")[3]} |
  Measure -Sum | Select -Exp Sum

如果此文件/字符串输入有标题,这也是一个好的开始。当然假设您的文件正好用一个空格分隔。

Get-Content c:\temp\test.txt | ConvertFrom-Csv -Delimiter " "

答案 1 :(得分:0)

我知道这篇文章很旧,但我想我会补充这个。目前,如果您启用了 WSL(用于 Linux 的 Windows 子系统),(Windows 10 在支持虚拟化的系统上的所有版本,在打开 Windows 功能时),并且在子系统中安装了一个发行版。可以直接从windows调用Linux命令

wsl -e awk '/"Box11"/{sum += $4} END{print sum}' test.txt

(借自@Ed Moritn) (或您选择的任何 awk 命令。) 基本上 cmd 或 PowerShell 接收命令并将其通过管道传输到子系统中并返回结果(有点过于简化,但实际上是准确的)。但是 -e 标志允许您在不打开实例的情况下执行命令。