ホームページ > システムチュートリアル > Linux > awkを使用したテキストまたは文字列のパターンフィルタリング方法

awkを使用したテキストまたは文字列のパターンフィルタリング方法

王林
リリース: 2023-12-30 15:02:15
転載
765 人が閲覧しました

テキストをフィルタリングするとき、特定の条件に基づいて、または一致する特定のパターンを使用して、ファイルまたは文字列内の特定の行をマークしたい場合があります。 awk を使用してこのタスクを実行するのは非常に簡単で、これは役立つ可能性がある awk の数少ない機能の 1 つです。

awkを使用したテキストまたは文字列のパターンフィルタリング方法

次の例を見てみましょう。たとえば、買いたい食品が記載された買い物リストがあるとします。その名前は food_prices.list です。含まれる食品の名前と対応する価格は次のとおりです:

$ cat food_prices.list No item_name 数量 価格 1 マンゴー 10 $2.45 2 リンゴ 20 $1.50 3 バナナ 5 $0.90 4 パイナップル 10 $3.46 5 オレンジ 10 $0.78 6 トマト 5 $0.55 7 玉ねぎ 5 $0.45

次に、(*) 記号を使用して単価が 2 ドルを超える食品をマークしたい場合は、次のコマンドを実行することでこれを行うことができます:

$ awk '/ */$[2-9]/.[0-9][0-9] */ { print $1, $2, $3, $4, "*" ; } / */$[0 -1]/.[0-9][0-9] */ { print ; }' food_prices.list

awkを使用したテキストまたは文字列のパターンフィルタリング方法

単価が 2 ドルを超えるアイテムを印刷する

上記の出力から、マンゴーとパイナップルを含む行の最後に (*) マークがあることがわかります。ユニットあたりの価格を確認すると、確かにユニットあたり 2 ドルを超えていることがわかります。

この例では、2 つのモードを使用しました:

最初のパターン: / */$[2-9]/.[0-9][0-9] */ は、単価が $2 を超える食品を含む行を取得します。

2 番目のパターン: /*/$[0-1]/.[0-9][0-9] */ は、食品の単価が $2 未満の行を検索します。

上記のコマンドは具体的に何をするのでしょうか?このファイルには 4 つのフィールドがあり、単価が 2 ドルを超える食品を含む行にパターンが一致すると、4 つのフィールドすべてが出力され、行の最後に (*) 記号がマークされます。

2 番目のモードは、入力ファイル food_prices.list に表示される単価が 2 ドル未満の食品を含む他の行を単純に出力します。

この方法では、パターンを使用して、価格が 2 ドルを超える食品を除外できます。上記の出力にはいくつか問題がありますが、(*) 記号の付いた行は他の行のようにフォーマットされていないため、出力が不鮮明に見えます。

awk シリーズの第 2 部でも同じ問題が発生しましたが、次の 2 つの方法で解決できます。

1. printf コマンドは次のように使用できますが、長くて退屈です。

$ awk '/ */$[2-9]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n", $1, $2, $3, $4 "*" ; } / */$[0-1]/.[0-9][0-9] */ { printf "%-10s %-10s %-10s %-10s/n ", $1, $2, $3, $4; }' food_prices.list

awkを使用したテキストまたは文字列のパターンフィルタリング方法Awk と Printf を使用してプロジェクトをフィルタリングして出力する

2. $0 フィールドを使用します。 Awk は変数

0

を使用して入力行全体を保存します。上記の問題に対して、この方法は非常に便利で、簡単かつ高速です: $ awk '/ */$[2-9]/.[0-9][0-9] */ { print $0 "*" ; } / */$[0-1]/.[0 -9][0-9] */ { print ; }' food_prices.list

awkを使用したテキストまたは文字列のパターンフィルタリング方法Awk と変数を使用してアイテムをフィルタリングして出力する

######結論は######

以上です。awk コマンドを使用すると、パターン マッチングを使用していくつかの簡単な方法でテキストをフィルターでき、ファイル内のテキストまたは文字列の特定の行をマークするのに役立ちます。

以上がawkを使用したテキストまたは文字列のパターンフィルタリング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:jb51.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート