我希望你能帮助我,基本上,我正在寻找与awk
命令相同的Powershell:
awk '/"Box11"/ { print $0 }' test.txt|awk '{ SUM += $4} END { print SUM} '
答案 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 标志允许您在不打开实例的情况下执行命令。