ウェブサイト検索

awkとSTDINを使用してコマンド出力をフィルタリングする方法


Awkコマンドシリーズの前の部分では、主にファイルからの入力を読み取る方法を見てきましたが、STDINから入力を読み取りたい場合はどうすればいいのでしょうか?

Awk シリーズの パート 7 では、ファイルからの入力を読み取る代わりに、他のコマンドの出力をフィルタリングするいくつかの例を見ていきます。

ディレクトリ内のユーザーが所有するファイルをリストする

最初に、lsコマンドに似たdirコマンドから始めます。以下の最初の例では、dir -lコマンドの出力を入力としてawkを使用し、現在のディレクトリ内の所有者のユーザー名、グループ名、およびその所有するファイルを印刷します:

dir -l | awk '{print $3, $4, $9;}'

ルートユーザーが所有するファイルのリスト

awk表現を使用する別の例を見てみましょう。ここでは、以下のawkコマンドのように文字列をフィルタリングする表現を使用して、rootユーザーが所有するファイルを印刷したいと思います。

dir -l | awk '$3=="root" {print $1,$3,$4, $9;} '

上記のコマンドには、現在のディレクトリ内のファイルがルートユーザーによって所有されているかどうかをフィルタリングするための(==)比較演算子が含まれています。これは、$3== ”root ”という式を使用して達成されます。

文字列を一致させるために Awk 比較演算子を使用する

特定の文字列を一致させるためにawk比較演算子を使用する別の例を見てみましょう。

ここでは、catコマンドを使用してtecmint_deals.txtという名前のファイルの内容を表示し、Techタイプの取引のみを表示したいので、次のコマンドを実行します:

cat tecmint_deals.txt
cat tecmint_deals.txt | awk '$4 ~ /tech/{print}'
cat tecmint_deals.txt | awk '$4 ~ /Tech/{print}'

上の例では、値~ /pattern/比較演算子を使用しましたが、非常に重要なことを引き出すために試すべき2つのコマンドがあります。

コマンドをtechというパターンで実行すると、そのタイプのdealが存在しないため、何も表示されません。しかし、Techで実行すると、Techタイプのディールが表示されます。

したがって、この比較演算子を使用する際は常に注意してください。上で見たように、大文字と小文字を区別します。

ファイルから入力を読み取る代わりに、別のコマンドの出力をawkへの入力として使用することができます。これは、上の例で見たように非常に簡単です。

今日変更されたファイルをフィルターする

今日変更されたファイルをフィルタリングするには、awkを使用してこれらのファイルを抽出して表示できます:

ls -l | awk '$6 == "Aug" && $7 == "9" {print $9}'

このコマンドは8月9日に変更されたファイルをフィルタリングします。

特定のタイプのファイルをカウントする

ディレクトリ内の.txtファイルの数をカウントするには、次のようにします:

ls -l | awk '$9 ~ /\.txt$/ {count++} END {print count}'

コマンド出力から特定のフィールドを抽出する

psコマンドの出力からプロセスIDやコマンド名などの特定のフィールドを抽出したい場合は、次のようにします。

ps aux | awk '{print $1, $2, $11}'

例があなたにとって十分に明確だったことを願っています。もし何か懸念があれば、以下のコメント欄で表現できます。そして、次のシリーズの部分では、awkの特徴である変数、数値表現、代入演算子について見ていくので、忘れずにチェックしてください。

包括的なリソースを求めている方のために、私たちはAwkシリーズの記事をすべてまとめた本を作成しました。この本には13章があり、41ページにわたって、基本的および高度なAwkの使用法を実践的な例と共に紹介しています。

商品名価格買う
eBook: 初心者のためのAwk入門ガイド8.99ドル[今すぐ購入]

関連記事: