PowerShell での Awk コマンドの実行

Marion Paul Kenneth Mendoza 2022年8月18日
PowerShell での Awk コマンドの実行

awk は、データ操作とレポート生成のためのスクリプト言語です。awk は、変数、テキスト関数、数値関数、および論理演算子をコンパイルせずにサポートするコマンドラインプログラミング言語です。

残念ながら、awk は Windows オペレーティングシステムを使用しているため、PowerShell に完全には統合されていません。この記事では、PowerShell を使用して awk コマンドと同様のコマンドと関数を使用する方法について説明します。

PowerShell で awk コマンドを実行する

awk ユーティリティを使用すると、プログラマーはテキストパターンを指定するステートメントの形式で簡潔で強力なプログラムを作成できます。これは、Linux コマンドや Linux 全般に慣れていないユーザーには奇妙な場合があります。これらのテキストパターンは各行で検索され、一致するものが見つかるとアクションが実行されます。

awk は主にパターンのスキャンと処理に使用されます。1つ以上のファイルを調べて、指定されたパターンに一致する行が含まれているかどうかを確認してから、関連するアクションを実行します。

次のコードスニペットは、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 から始まることに注意してください。したがって、awk コマンドとは異なり、4 の代わりにインデックス 3 を使用します。
  • Measure-Object はプロパティの計算を実行します。この場合は Sum です。
  • 最後に、Select-ObjectSum 展開プロパティを出力します。

気付いた場合、PowerShell バージョンの awk コマンドは少し長くなっています。PowerShell では、エイリアスといくつかの PowerShell 演算子を使用してショートカットを作成できるのは良いことです。

サンプルコード:

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

または、WSL(Windows Subsystem for Linux)を有効にしている場合は、awk コマンドをそのまま実行できます。Linux 用 Windows サブシステム(WSL)と呼ばれる Windows オペレーティングシステムの機能を使用すると、Linux コマンドラインツールと GUI アプリケーションを備えた Linux ファイルシステムを Windows 上で直接実行できます。

したがって、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