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-Object
はSum
展開プロパティを出力します。
気付いた場合、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 specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn