在 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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn