[シェル] 6つのawkコマンド学習

著作権:ソースを明記してください再現。https://blog.csdn.net/u010720408/article/details/90766857

同様のコールはsedのAWK
(現在のLinuxは、互いに両方今同等、gawkのに使用されている。)、
C / Cと類似のAWKでステートメントを実行++

3つの方法でawkの呼び出し

①シェルコマンドを入力します。

awk [-F 域分隔符] 'awk 程序段' 输入文件

②awkブロック挿入スクリプトファイルは、その後、コマンドawkはそれを呼び出します

awk -f awk脚本文件 输入文件
#通过-f 调用awk脚本文件

③スクリプトファイルにawkコマンドの後、実行可能ファイルを設定し、スクリプトファイルを実行します

./awk脚本文件 输入文件

1. awkのパターンマッチング

awkのパターンおよび組成物によるアクション、
アクション場合、フォローアップアクションを実行するためのパターンモード選択入力ラインと、
アクションのアクションは文、関数、式の実行中に含ませることができる。
パターンはgrepをよりawkの定期的な表現大園文字でサポートされている、広いsedの。

#空白行を印刷

awk '/^$/{print "This is a blank line."}' input

ここに画像を挿入説明

2. awkのレコードとフィールド

AWK人間の入力は、各入力ラインがレコードファイルとして定義されているawkは、構造化文書であり、
各列はドメイン、Tabキー、または他の記号の間の空間で割った、文字列フィールドとして定義され、
連続した複数の空間、複数ドメイン分割として連続シンボル処理等の間にタブ。

ドメイン、$ $後で指定された最初のフィールドの値を取得するために、インデックス1、$ 1から始めて、いくつかのフィールドの最初の実行を取るを表しawkの番号を使用します。

すべてのドメインの$ 0;

3. awkの変数システム

変数名 意味
$ N n番目のフィールドの値をとります
$ 0 すべてのドメインを取る、すなわち、全体のライン
ARGC コマンドライン引数の数
ARGIND (0符号から始まる)現在のファイルの場所のコマンドライン
ARGV コマンドライン引数の配列
CONVFMT デジタル変換フォーマット
環境変数の連想配列
ERRNO 最後に、エラーのシステムの説明
FIELDWIDTHS フィールドリストの幅は、スペースバーを分割します
ファイル名 現在のファイル名
FNR レコード番号ブラウズファイル
FS フィールドセパレータ、デフォルトのスペースバー
IGNORECASE ブール変数、trueの場合、無視する場合のマッチングが行われます
NF 現在のレコード内のドメインの数
NO レコードの現在の数
OFMT デジタル出力フォーマット
OFS 出力フィールドセパレータ、デフォルトのスペースバー
ORS 出力レコードセパレータ、デフォルトの改行
RLENGTH match関数マッチした文字列の長さにより、
RS レコード区切り文字、デフォルトの改行
RSTART マッチした文字列マッチ関数は、バスの位置よりも低いです
SUBSEP 配列の添字セパレータは、デフォルト値は\ 034です

4. awkのフォーマットされた出力

printf (格式控制符,参数)

修飾子:

修飾子 意味
-
ステップドメイン
.prec 小数点以下の桁

フォーマッタ:

フォーマッタ
%のC ASCII文字
%D 整数
%eは 浮動小数点、科学表記
%F フロート
オクタル
%sの
%バツ 進数
awk 'BEGIN {FS=","} {printf("%s\t%d\n",$2,$8)}' sturecord

ここに画像を挿入説明

#配合修饰符
awk 'BEGIN {FS==" ";print "Name\t\tPhonenumber"} {printf("%-15s\t%s\n",$1,$2)}' sturecord

ここに画像を挿入説明

5. awkの組み込みの文字列関数

関数
GSUB(R、S) R Sと代替的に、入力ファイル
GSUB(R、S、T) あるいはTのSとrの
指標(s、t)は T sの最初の文字列の位置を返します。
長さ(S)
一致する(s、t)は Sテスト置換文字列はTにマッチする場合
スプリット(R、S、T) シーケンスS T Rにオン
サブ(R、S、T) Sの最初の発生でR tは置換されています
SUBSTR(R、S) サフィックスのR部分文字列sから始まる返します
SUBSTR(R、S、T) 接尾語の長さのR、S、T開始部から文字列を返します。

伝送を転送する6. awkスクリプトファイル

awk脚本 parameter=value 输入文件
./pass.awk   MAX=3 FS="," inpufilename

コマンドラインパラメータは、ステートメントをアクセスすることができないことに注意してくださいフィールドをBEGIN

7. awkの条件文とループ文

if (x ~ /[Hh]el?o/) print x

do
  动作
while (天剑表达式)

for (设置计数器初值;测试计数器;计数器变化)
  动作

8. AWKアレイ配列[インデックス] =値

連想配列

記録の8 AWK実用的な操作

)ファイル名を入力しますsturecord :(スペースは、[Tab]キーの背後にあるさ
リーハオnjue 025から83481010
張挙NJU 025から83466534
王のSEU 025から83494883ビン
025から83680010 njupt朱林

ここに画像を挿入説明

#awk 打印第一、二列域
awk '{print $1,$2}' sturecord

ここに画像を挿入説明

#awk 变量指定域号
awk 'begin {one=1;two=2} {print $(one+two)}' sturecord

ここに画像を挿入説明

#-F 改变分隔符
awk -F "\t" 'print $3' sturecord

ここに画像を挿入説明

#awk 同样也提供另一个环境变量FS的改变分割符
awk 'BEGIN {FS=","} {print $0}' sturecord
awk 'BEGIN {FS=","} {print $1,$3}' sturecord

#awk 中 ~匹配正则表达式  !~ 不匹配正则表达式
awk 'BEGIN {FS=":"} $1~/root/' /etc/passwd


#if/else else 以及与或运算,用逗号分割,第三列等于10或第四列等于10则打印整行
awk 'BEGIN {FS=","} {if ($3==10 || $4==10) print $0}' /etc/paswd

#awk 统计 空行,类似C/C++ 有x++ ++x的区别
awk '/^$/{print x+=1}' input

おすすめ

転載: blog.csdn.net/u010720408/article/details/90766857