著作権:ソースを明記してください再現。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