【Linuxコマンド解説事典】050.awk組み込み変数の使い方と各種演算子詳細分析

awk 組み込み変数 (事前定義された変数)

説明: [A][N][P][G] は、変数をサポートする最初のツールを示します。[A]=awk、[N]=nawk、[P]=POSIXawk、[G]=gawk

  • $n現在のレコードの n 番目のフィールド。たとえば、n が 1 の場合は最初のフィールドを意味し、n が 2 の場合は 2 番目のフィールドを意味します。
  • $0この変数には、実行中の現在の行のテキスト内容が含まれます。
  • [N] ARGCコマンド ライン引数の数。
  • [G] ARGINDコマンド ライン内の現在のファイルの位置 (0 から数えます)。
  • [N] ARGVコマンドライン引数を含む配列。
  • [G] CONVFMTデジタル変換形式 (デフォルトは %.6g)。
  • [P] ENVIRON環境変数連想配列。
  • [N] ERRNO最後のシステム エラーの説明。
  • [G] FIELDWIDTHSフィールド幅のリスト (スペース区切り)。
  • [A] FILENAME現在の入力ファイルの名前。
  • [P] FNRは NR と同じですが、現在のファイルを基準にしています。
  • [A] FSフィールド区切り文字 (デフォルトは任意のスペース)。
  • [G] IGNORECASE true の場合、大文字と小文字に関係なく一致します。
  • [A] NF はフィールド数を示し、実行中の現在のフィールド数に対応します。
  • [A] NR はレコード数を表し、実行時の現在の行番号に対応します。
  • [A] OFMT数値の出力形式 (デフォルトは %.6g)。
  • [A] OFS出力フィールド区切り文字 (デフォルトはスペース)。
  • [A] ORS出力レコード区切り文字 (デフォルトは改行)。
  • [A] RSレコード区切り文字 (デフォルトは改行)。
  • [N] RSTART match 関数によって一致した文字列の最初の位置。
  • [N] RLENGTH一致関数によって一致した文字列の長さ。
  • [N] SUBSEP配列の添え字区切り文字 (デフォルト値は 34)。

エスケープシーケンス

  • \ \自身
  • $エスケープ$
  • \t タブ文字
  • \b バックスペース文字
  • \r キャリッジリターン
  • \n 改行
  • \c 改行をキャンセルします

echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{print "Line No:"NR", No of fields:"NF, "$0="$0, "$1="$1, "$2="$2, "$3="$3}'

出力結果:

Line No:1, No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line No:2, No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line No:3, No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

print NF を使用して行の最後のフィールドを出力します。NF を使用して行の最後のフィールドを出力します。NF は、行の最後のフィールドを出力したり、 (NF-1) を使用して最後から 2 番目のフィールドを出力したりできます。

echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $NF}'

出力結果:

f3
f5
echo -e "line1 f2 f3\n line2 f4 f5" | awk '{print $(NF-1)}'

出力結果:

f2
f4

各行の 2 番目と 3 番目のフィールドを出力します。

awk '{ print $2,$3 }' filename

ファイル内の行数をカウントします。

awk 'END{ print NR }' filename

上記のコマンドは END ステートメント ブロックのみを使用します。各行が読み取られると、awk は NR を対応する行番号に更新します。最後の行に到達すると、NR の値は最後の行の行番号になるため、NR はEND ステートメント ブロックはファイル内の行数です。

各行の最初のフィールド値を累積する例:

seq 5 | awk 'BEGIN{ sum=0; print "总和:" } { print $1"+"; sum+=$1 } END{ print "等于"; print sum }'

出力結果:

总和:
1+
2+
3+
4+
5+
等于
15

外部変数の値を awk に渡す

外部値 (標準入力からではない) は、-v オプションを使用して awk に渡すことができます。

VAR=10000
echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'

外部変数を渡す別の方法:

var1="aaa"
var2="bbb"
echo | awk '{ print v1,v2 }' v1=$var1 v2=$var2

入力がファイルからのものである場合に使用します。

awk '{ print v1,v2 }' v1=$var1 v2=$var2 filename

プロセスの PID を見つける

netstat -antup | grep 7770 | awk '{ print $NF NR}' | awk '{ print $1}'

awkの操作と判断

awk は、プログラミング言語が持つべき特性の 1 つとして、C 言語が提供するものと基本的に同じであるさまざまな操作をサポートしています。Awk は、文字列操作 (操作) のための一連の組み込み演算関数 (log、sqr、cos、sin など) といくつかの関数 (length、substr など) も提供します。これらの関数を参照することでawkの操作機能が大幅に向上しました。条件付き転送命令の一部として、関係性の判定はあらゆるプログラミング言語の機能であり、awk も例外ではありません。awk では複数のテストが可能です。スタイルの一致として、パターン マッチング表現 (一致) と ! (不一致) も提供されますテストの拡張機能として、awk は論理演算子もサポートします。

算術演算子

オペレータの説明

    • 足す、引く
  • / & 乗算、除算、剰余
    • ! 単項加算、減算、論理否定
      ^ *** べき乗
      ++ – 接頭辞または接尾辞としての増加または減少

例:

awk 'BEGIN{a="b";print a++,++a;}'

出力結果:

0 2

注: すべての演算は算術演算子として使用され、オペランドは自動的に値に変換され、値以外の値はすべて 0 に変換されます。

代入演算子

演算子の説明
= += -= *= /= %= ^= **= 代入ステートメント

例:

a+=5; 等价于:a=a+5; 其它同类

論理演算子

演算子の説明
|| 論理和
&& 論理積

例:

awk 'BEGIN{a=1;b=2;print (a>5 && b<=2),(a>5 || b<=2);}'

出力結果:

0 1

通常のオペレーター

オペレータの説明
!~ は正規表現に一致しますが、正規表現には一致しません
^ 行頭
$ 行末
. 改行を除く任意の 1 文字
  • 0 個以上の先頭文字
    .* すべての文字
    [] 文字グループ内の任意の文字
    [^] 文字グループ内の各文字を否定します (文字グループ内のすべての文字と一致するわけではありません)
    [ ] 非文字グループ文字
    [az] 小文字[ AZ [0-9] 数字[aZ] 小文字と大文字
    ] 大文字/regulator/ で囲む必要があります。




例:

awk 'BEGIN{a="100testa";if(a ~ /^100*/){print "ok";}}'

出力結果:

ok

関係演算子

演算子 説明
< <= > >= != == 関係演算子

例:

awk 'BEGIN{a=11;if(a >= 9){print "ok";}}'

出力結果:

ok

注: > < は文字列比較または数値比較として使用できます。重要なのは、オペランドが文字列の場合、文字列比較に変換されるということです。どちらも数値比較に変換する前の数値です。文字列比較: ASCII 順に比較します。

他の演算子

演算子 説明
$ フィールド参照
スペース文字列 Connector ?:配列内に特定のキーが存在するかどうかの
C 条件式

例:

awk 'BEGIN{a="b";print a=="b"?"ok":"err";}'

出力結果:

ok
awk 'BEGIN{a="b";arr[0]="b";arr[1]="c";print (a in arr);}'

出力結果:

0
awk 'BEGIN{a="b";arr[0]="b";arr["b"]="c";print (a in arr);}'

出力結果:

1

運用優先順位表

!レベルが高いほど優先度が高くなります
レベルが高いほど優先度が高くなります

awk の高度な入出力
次のレコードの読み取り awk の next
ステートメントが使用されます。ループ内で 1 行ずつ一致します。next が見つかった場合、現在の行はスキップされ、次のステートメントは直接無視されます。代わりに、次の行が照合されます。次のステートメントは通常、複数行のマージに使用されます。

cat text.txt
a
b
c
d
e

awk 'NR%2==1{next}{print NR,$0;}' text.txt

レコード行番号を 2 で割って余りが 1 の場合、現在の行はスキップされます。次の print NR, $0 も実行されません。次の行の先頭で、プログラムは NR%2 の値の判定を開始します。このとき、レコード行番号は 2 となり、次のステートメント ブロックが実行されます: 'print NR,$0'

分析の結果、「web」を含む行をスキップし、コンテンツを次の行で 1 行にマージする必要があることがわかりました。

cat text.txt
web01[192.168.2.100]
httpd            ok
tomcat               ok
sendmail               ok
web02[192.168.2.101]
httpd            ok
postfix               ok
web03[192.168.2.102]
mysqld            ok
httpd               ok
0

awk '/^web/{T=$0;next;}{print T":"t,$0;}' text.txt

記録を読むだけ

Awk getline の使用法: getline 関数は出力リダイレクトに必要です。getline は、標準入力、パイプ、または現在処理されているもの以外の別の入力ファイルから入力を受け取ります。入力から次の行の内容を取得し、NF、NR、FNR などの組み込み変数に値を割り当てる役割を果たします。getline 関数は、レコードが取得された場合は 1 を返し、ファイルの末尾に到達した場合は 0 を返し、ファイルを開けないなどのエラーが発生した場合は -1 を返します。

getline 構文: getline var、変数 var には特定の行の内容が含まれます。

Awk getline 全体の使用手順:

  • リダイレクト文字 | または < が周囲にない場合: getline は現在のファイルに作用し、現在のファイルの最初の行を次の変数 var または $0 (変数なし) に読み取ります。 getline ラインが読み取られるため、getline の戻り結果はインターレースされます。
  • リダイレクト文字 | または < が左右にある場合: getline は方向入力ファイルに作用します ファイルは開かれたばかりなので、awk によって行に読み込まれませんが、getline は読み込み、その後 getline が最初の行を返します1 行おきではなく、ファイルの . 行です。

例:

Linux の date コマンドを実行し、パイプライン経由で getline に出力し、その出力をカスタム変数 out に代入して出力します。

awk 'BEGIN{ "date" | getline out; print out }' test

シェルの date コマンドを実行し、パイプライン経由で getline に出力します。その後、getline はパイプラインから読み取り、入力を out に割り当てます。split 関数は変数 out を配列 mon に変換し、配列の 2 番目の要素を出力します。月:

awk 'BEGIN{ "date" | getline out; split(out,mon); print mon[2] }' test

コマンド ls の出力は入力として Geline に渡され、ループにより getline は ls の出力から 1 行を読み取り、それを画面に出力します。ここには入力ファイルはありません。入力ファイルを開く前に BEGIN ブロックが実行されるため、入力ファイルは無視できます。

awk 'BEGIN{ while( "ls" | getline) print }'

ファイルを閉じる

awk では、awk close ステートメントを使用して、プログラム内で入力ファイルまたは出力ファイルを閉じることができます。

close("filename")

filename には、getline によって開かれたファイル、stdin、ファイル名を含む変数、または getline によって使用される正確なコマンドを指定できます。または、出力ファイル (標準出力、ファイル名を含む変数、またはパイプを使用した正確なコマンド)。

ファイルへの出力
awk では、次のように結果をファイルに出力できます。

echo | awk '{printf("hello word!n") > "datafile"}'
# 或
echo | awk '{printf("hello word!n") >> "datafile"}'

ゼロから学ぶpython

【ゼロから学ぶPython】 92. Pythonのリクエストライブラリを使ってHTTPリクエストを送信し、レスポンスを処理する
【ゼロから学ぶPython】 91. デコレータと辞書を使ってリクエストパスの簡単なWebアプリケーションを管理する
【ゼロから学ぶPython】 93. 辞書管理を使うリクエストパス
【ゼロから学ぶPython】 89. WSGIを使ってシンプルで効率的なWebサーバーを構築する
【ゼロから学ぶPython】 88. WSGIインターフェースの詳細解説:シンプルで効率的なWeb開発を実現する
【ゼロから学ぶPython】 87. 手動で構築するHTTP サーバー Python の実装とマルチスレッド同時処理
[ゼロから学ぶ Python] 86. ブラウザとサーバー通信における HTTP プロトコルとその役割を深く理解する
[ゼロから学ぶ Python] 85. Python プロセス プールの並列コンピューティング技術の応用
[ゼロから学ぶPython】 84. スレッドとプロセスを深く理解する
【ゼロから学ぶPython】 83. Pythonのマルチプロセスプログラミングとプロセスプールの利用
【ゼロから学ぶPython】 82. マルチベースのチャットプログラムの実現スレッド化
[ゼロから学ぶ Python] 81. Python など スレッド通信とキューの応用
[ゼロから学ぶ Python] 80. グローバル変数へのスレッド アクセスとスレッド セーフティの問題
[ゼロから学ぶ Python] 79. グローバル変数へのスレッド アクセスとスレッドセキュリティの問題
[ゼロから学ぶ Python] 78. ファイル ダウンロードの事例
[ゼロから学ぶ Python] 77. TCP サーバーのプログラミングと注意事項
[ゼロから学ぶ Python] 76. サーバーとクライアント: ネットワーク通信の主要コンポーネント
[ゼロから学ぶ Python] 75 TCPプロトコル:信頼性の高いコネクション指向の伝送層通信プロトコル
【ゼロから学ぶPython】 74. UDPネットワークプログラム:ポートの問題とバインディング情報を詳しく解説
【ゼロから学ぶPython】 73. UDPネットワークプログラム – データの送信
【ゼロから学ぶPython】 72. ソケット通信とソケットの作成 【ゼロから学ぶPython】のやり方
71. ネットワークポートとその機能
【ゼロから学ぶPython】 70. ネットワークの通信方法とその応用:ルータへの直接通信から複数のネットワークを接続するまで
【ゼロから学ぶPython】 69.ネットワーク通信とIPアドレス分類分析
[ゼロから学ぶPython] 68. Python正規表現の貪欲モードと非貪欲モード
[ゼロから学ぶPython] 67. Pythonのreモジュール:正規置換と高度なマッチング技術
[ゼロから学ぶPython] 66 .正規表現を深く理解する:パターンマッチングとテキスト処理のための強力なツール
【ゼロから学ぶPython】 65. Pythonの正規表現修飾子とその応用を詳しく解説
【ゼロから学ぶPython】 64. re.compileメソッドin Python正規表現 詳細解説
【ゼロから学ぶPython】 63. 正規表現のre.Matchクラスとその属性、メソッドの紹介
【ゼロから学ぶPython】 62. Pythonの正規表現:強力な文字列マッチングツール
【ゼロから学ぶPython】ゼロ】 61. Python のプロパティ属性の詳しい説明と応用例
【ゼロから学ぶ Python】 60. 探索ジェネレータ:反復のための柔軟なツール
【ゼロから学ぶ Python】 59. イテレータ:データトラバーサルを最適化する効率的なツール
【ゼロから学ぶ Python 】ゼロから】 58. Pythonのカスタム例外と例外発生方法
【ゼロから学ぶPython】 57. Pythonのwithキーワードを使ってリソースを正しくクローズする
【ゼロから学ぶPython】 56. プログラミングにおける例外処理の重要性と応用
【ゼロから学ぶPython】 55. Pythonのシリアライズと処理 デシリアライズ、 JSONとpickleモジュールの応用
【ゼロから学ぶPython】 54. メモリにデータを書き込む
【ゼロから学ぶPython】 53. CSVファイルとPython CSVモジュール
【ゼロから学ぶPython】 52. ファイルの読み書き - Pythonファイル操作ガイド
[ゼロから学ぶPython】 51. Pythonでのファイルのオープンとクローズとその応用
【ゼロから学ぶPython】 49. Pythonのオブジェクト関連の組み込み関数とその使い方
【ゼロから学ぶPython】 48 . 継承とその使い方を詳しく解説Python の多重継承
[ゼロから学ぶ Python] 47. オブジェクト指向プログラミングにおける継承の概念と基本的な使い方
[ゼロから学ぶ Python] 46. Python の __new__ および __init__ メソッドの分析とシングルトン デザイン パターン
[ゼロから学ぶ Python] 45 . Pythonのクラスメソッドと静的メソッド
【ゼロから学ぶPython】 44. オブジェクト指向プログラミングのプライベート属性とメソッド
【ゼロから学ぶPython】 43. Pythonのオブジェクト指向プログラミングの例 属性とクラス属性
【ゼロから学ぶPython】 42. Pythonの組み込み属性とメソッド
【ゼロから学ぶPython】 41. Pythonの魔法のメソッド(2)
【ゼロから学ぶPython】 40. Pythonの魔法のメソッド(1)
【ゼロから学ぶPython】 39. オブジェクト指向の基本文法と応用例
【ゼロから学ぶPython】 38. Pythonパッケージの利用とインポート
【ゼロから学ぶPython】 37. Pythonカスタムモジュールの使い方と注意点
【ゼロから学ぶPython】 】 36. サードパーティパッケージ管理にPythonでpipを使う方法とスキル
【ゼロから学ぶPython】 35. Pythonの共通システムモジュールとその使い方
【ゼロから学ぶPython】 34. Pythonモジュールのインポートと使い方を詳しく解説
【ゼロから学ぶPython】 33. デコレータの役割(2)
【ゼロから学ぶPython】 32. デコレータの役割(1)
【ゼロから学ぶPython】 31. 高階関数とクロージャを深く理解するPython
【ゼロから学ぶPython】 30. 再帰関数と無名関数を深く理解する
【ゼロから学ぶPython】 29. 「関数パラメータの詳細解説」 - Python関数パラメータの使い分けを理解する
【ゼロから学ぶPython】 28 . Pythonのローカル変数とグローバル 変数
【ゼロから学ぶPython】 27. Python関数の使い方と入れ子呼び出し
【ゼロから学ぶPython】 25. 関数:コード作成効率を上げるツール
【ゼロから学ぶPython】 24. 文字列操作Pythonのトラバース方法とトラバーサル方法
【ゼロから学ぶPython】 23. Pythonの集合(set)の使い方とよくある操作
【ゼロから学ぶPython】 22. Pythonの辞書と辞書の変数の追加・削除・変更・問い合わせ
【 Pythonをゼロから学ぶ】 21. Pythonのタプルと辞書
【ゼロから学ぶPython】 20. Pythonのリスト操作スキルと例題
【ゼロから学ぶPython】 19. リストのループとリストのネスティングの応用
【ゼロから学ぶPython】 18. Pythonのリストの基本操作を詳しく解説(1)
【ゼロから学ぶPython】 17. Pythonの文字列の整形方法(2)
【ゼロから学ぶPython】 16. Pythonの文字列の整形方法(1)
【ゼロから学ぶPython】 15. 文字列と文字セットのエンコーディングを深く理解する
【ゼロから学ぶPython】 14. Pythonの文字列のよくある操作(2)
【ゼロから学ぶPython】 13. Pythonの文字列のよくある操作(1)
【ゼロから学ぶPython】 12. Pythonの文字列の操作と応用
【ゼロから学ぶPython】 11. Pythonのループ文と制御フロー
【ゼロから学ぶPython】 10. Pythonの条件文とifネストの詳細解説
【ゼロから学ぶPython】 09. Pythonの条件判定文
【ゼロから学ぶPython】 08. ビット演算がわかるPython演算子、演算子の優先順位
【ゼロから学ぶPython】 07. Pythonの演算子を詳しく解説:代入、比較、論理演算子
【ゼロから学ぶPython】 06. Pythonで算術演算子を使って計算や文字列連結をする
【ゼロから学ぶPython】 05. Python の出力と入力
【ゼロから学ぶ Python】 04. Python プログラミングの基礎: 変数、データ型、識別子
【ゼロから学ぶ Python】 03. Python 対話型プログラミングと詳細なアノテーション
【ゼロから学ぶPython】02. 開発ツールの紹介
【ゼロから学ぶPython】01. Pythonのインストールと設定

おすすめ

転載: blog.csdn.net/qq_33681891/article/details/132661800