awk命令powershell等效



我希望您能帮助我,从本质上讲,我正在寻找相当于awk命令的PowerShell:

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

他的作用是包含字符串盒11的打印行,然后将其管道输送到另一个打印第4列的尴尬(由空格界定)。

多种方法的方法,但这将有能力:

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

获取文件的字符串数组。对于包含字符串"Box11"的每条线,我们在每组空间上划分线。然后将每场比赛的4个元素传递给Measure-Object

一只短的手,如果您重视这一点,就会像这样:

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

如果此文件/字符串输入具有标题,这也是一个不错的开始。当然,假设您的文件已与一个空间完全界定。

Get-Content c:temptest.txt | ConvertFrom-Csv -Delimiter " "

我知道这篇文章是旧的,但是我想我会添加。当前,如果您启用了WSL(Windows Sub System)(Windows 10(Windows 10)在转向Windows功能中支持虚拟化的系统上的所有版本),则在子系统中安装了分布。您可以直接从Windows

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

(从@ed Moritn借来)(或您选择的任何尴尬命令。)基本上,CMD或PowerShell接收命令并将其管道输送到子系统中,并返回结果(有点简化,但实际上是准确的)。但是-e标志允许您执行命令而无需打开实例。

编辑自从编写此初步响应以来,我找到了两个答案,这些答案是更好的解决方案。第一个是gnuwin32,这是一个gnutils的集合,已移植到Windows独立的.exe文件,包括SED,Awk,Grep等,允许您致电Get-Childitem |awk.exe'{print $ 1}'。这些工具是完全便携式的,无需安装。第二种选择是MSYS32,该平台是由巧克力生长的(尽管现在几乎完全代码的依赖代码)是为交叉编译二进制的。一旦安装在/bin文件夹中,是许多Linux实用程序作为EXE文件。这些可执行文件中的大多数都可以从垃圾箱中拉出,并且可以移植,而无需安装依赖项。MSYS32之所以优先(在我的书中),而不是GNUWIN32,这是GNUWIN32具有3.1版GNUWIN32,MSYS32具有NAWK和GAWK vs 5.1。

您现在可以获得Windows的awk。我一直在使用它作为直接替代品,尚未有任何问题。

可以通过巧克力轻松安装

最新更新