在 PowerShell 中执行 awk 命令

Marion Paul Kenneth Mendoza 2022年7月18日
在 PowerShell 中执行 awk 命令

awk 是一种用于数据操作和报告生成的脚本语言。awk 是一种命令行编程语言,无需编译即可支持变量、文本函数、数值函数和逻辑运算符。

不幸的是,awk 没有完全集成到 PowerShell 中,因为它使用的是 Windows 操作系统。本文将讨论如何使用 PowerShell 使用与 awk 命令类似的命令和功能。

在 PowerShell 中执行 awk 命令

awk 实用程序允许程序员以指定文本模式的语句的形式创建简短但功能强大的程序,这对于不熟悉 Linux 命令或一般 Linux 的用户可能会感到陌生。在每一行中搜索这些文本模式,并在找到匹配项时采取措施。

awk 主要用于模式扫描和处理。它探索一个或多个文件以查看它们是否包含与指定模式匹配的行,然后执行相关操作。

以下代码片段是使用 awk 的命令示例。

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

要执行类似 awk 命令的操作,我们将使用 Get-Content 命令获取文件的内容并在 Windows PowerShell 中执行几个字符串操作。如果我们采用上面的示例,这就是它在 PowerShell 中的样子。

示例代码:

Get-Content c:\temp\test.txt |
Where-Object{$_ -match '"Box11"'} |
ForEach-Object{($_ -split "\s+")[3]} |
Measure-Object -Sum |
Select-Object -ExpandProperty Sum
  • Get-Content 命令将获取文本文件的内容。
  • Where-Object 命令将过滤带有 Box11 字符串的行。
  • 然后,一旦过滤掉,脚本将循环以将每个行字符串拆分到其第 4 个元素中。请记住,PowerShell 从索引 0 开始;因此,我们使用索引 3 而不是 4,这与我们的 awk 命令不同。
  • Measure-Object 将对属性执行计算,在这种情况下为 Sum
  • 最后,Select-Object 将输出 Sum 扩展属性。

如果我们注意到,我们的 PowerShell 版本的 awk 命令会稍长一些。好在在 PowerShell 中,我们可以通过使用别名和几个 PowerShell 运算符来创建快捷方式。

示例代码:

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

或者,如果你启用了 WSL(适用于 Linux 的 Windows 子系统),我们可以按原样运行 awk 命令。Windows 操作系统的一项称为 Linux 的 Windows 子系统 (WSL) 的功能使你能够直接在 Windows 上运行 Linux 文件系统,以及 Linux 命令行工具和 GUI 应用程序。

所以我们必须调用 wsl 命令并本地执行 awk 命令。

示例代码:

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

Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.

LinkedIn

相关文章 - PowerShell Command