ホームページ > システムチュートリアル > Linux > awk の特殊モード BEGIN と END を使用して処理する方法

awk の特殊モード BEGIN と END を使用して処理する方法

WBOY
リリース: 2024-01-02 18:06:07
転載
837 人が閲覧しました

awk シリーズの 8 番目のセクションでは、変数、数値式、代入演算子などの強力な awk コマンド関数を紹介しました。

このセクションでは、awk 関数、つまり awk の特殊モード BEGINEND について詳しく学習します。

複雑な awk 操作を構築するさらなる方法を開発し模索するにつれて、awk のこれらの特別な機能がいかに強力であるかを証明していきます。

始める前に、awk シリーズの概要を確認しましょう。このシリーズを開始したときに、awk 命令の一般的な構文が次のようなものであると指摘したことを思い出してください:

リーリー

上記の構文では、awk スクリプトの形式は次のとおりです。

リーリー

通常、スクリプト内のパターン (/pattern) は正規表現であることがわかります。さらに、ここで特別なパターン BENGIN および を使用することもできます。終わり# ##。したがって、次の形式で awk コマンドを記述することもできます: リーリー

awk スクリプトで特別なモードを使用する場合:

BEGINEND、対応する意味は次のとおりです:

  • BEGIN モード: awk が入力行を読み取る直前に BEGIN で指定されたアクションを実行することを意味します。
  • END モード: awk が正式に終了する前に、END で指定されたアクションを実行することを意味します。
これらの特別なモードを含む awk コマンド スクリプトの実行フローは次のとおりです:

  1. BEGIN モードがスクリプトで使用される場合、入力行が読み取られる前に、BEGIN 内のすべてのアクションが実行されます。
  2. 次に、入力行が読み込まれ、異なるセグメントに解析されます。
  3. 次に、指定された非特殊パターンと入力行との比較照合が行われ、一致した場合にパターンに応じたアクションが実行されます。指定したすべてのパターンに対してこの手順を繰り返します。
  4. 次に、すべての入力行に対して手順 2 と 3 を繰り返します。
  5. すべての入力行が読み取られて処理された後、
  6. END モードを指定すると、対応するアクションが実行されます。
特殊モードを使用する場合、awk 操作から最良の結果を得るには、上記の実行順序を覚えておく必要があります。

理解を容易にするために、セクション 8 の例を使用して説明します。この例は、Tecmint が所有し、domains.txt というファイルに保存されているドメイン名のリストに関するものです。

リーリー リーリー

如何使用 awk 的特殊模式 BEGIN 与 END

ファイルの内容を表示 この例では、ドメイン名

tecmint.com が Domains.txt ファイルに出現する回数を数えることを目的としています。そこで、タスクを完了するのに役立つ、変数、数式、代入演算子のアイデアを使用する簡単なシェル スクリプトを作成しました。スクリプトの内容は次のとおりです。 リーリー 次に、上記のスクリプトの awk コマンドに、以下のように 2 つの特別なパターンを適用しましょう:

BEGIN

END : スクリプトを置く必要があります:

リーリー

は次のように変更されました:

awk ' BEGIN {  print "文件中出现 tecmint.com 的次数是:" ; }
/^tecmint.com/ {  counter+=1  ;  }
END {  printf "%s/n",  counter  ; } 
'  $file
ログイン後にコピー

在修改了 awk 命令之后,现在完整的 shell 脚本就像下面这样:

#!/bin/bash
for file in $@; do
if [ -f $file ] ; then
### 输出文件名
echo "File is: $file"
### 输出文件中 tecmint.com 出现的总次数
awk ' BEGIN {  print "文件中出现 tecmint.com 的次数是:" ; }
/^tecmint.com/ {  counter+=1  ;  }
END {  printf "%s/n",  counter  ; } 
'  $file
else
### 若输入不是文件,则输出错误信息
echo "$file 不是一个文件,请指定一个文件。" >&2 && exit 1
fi
done
### 成功执行后使用退出代码 0 终止脚本
exit 0
ログイン後にコピー

如何使用 awk 的特殊模式 BEGIN 与 END

awk 模式 BEGIN 和 END

当我们运行上面的脚本时,它会首先输出 domains.txt 文件的位置,然后执行 awk 命令脚本,该命令脚本中的特殊模式 BEGIN 将会在从文件读取任何行之前帮助我们输出这样的消息“文件中出现 tecmint.com 的次数是: ”。

接下来,我们的模式/^tecmint.com/ 会在每个输入行中进行比较,对应的动作{ counter+=1 ; } 会在每个匹配成功的行上执行,它会统计出 tecmint.com 在文件中出现的次数。

最终,END 模式将会输出域名 tecmint.com 在文件中出现的总次数。

$ ./script.sh ~/domains.txt 
ログイン後にコピー

如何使用 awk 的特殊模式 BEGIN 与 END

用于统计字符串出现次数的脚本

最后总结一下,我们在本节中演示了更多的 awk 功能,并学习了特殊模式 BEGINEND 的概念。

正如我之前所言,这些 awk 功能将会帮助我们构建出更复杂的文本过滤操作。第十节将会给出更多的 awk 功能,我们将会学习 awk 内置变量的思想,所以,请继续保持关注。


以上がawk の特殊モード BEGIN と END を使用して処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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