在 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