ホームページ > 記事 > システムチュートリアル > awkを使用したテキストまたは文字列のパターンフィルタリング方法
テキストをフィルタリングするとき、特定の条件に基づいて、または一致する特定のパターンを使用して、ファイルまたは文字列内の特定の行をマークしたい場合があります。 awk を使用してこのタスクを実行するのは非常に簡単で、これは役立つ可能性がある awk の数少ない機能の 1 つです。
次の例を見てみましょう。たとえば、買いたい食品が記載された買い物リストがあるとします。その名前は 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
単価が 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 と 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を使用したテキストまたは文字列のパターンフィルタリング方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。