、LS -l | grepを^ D
二つは、選択ブラシのawkの強力なファイル検索解析ツールシェル
参考:https://www.cnblogs.com/chenhuan001/p/6297615.html
図1に示すように、 オブジェクトAWK '{パターン+アクション} {ファイル名} ファイル名を見つけるために探している行動内容コマンドパターン
操作が複雑であることができるが、構文は常にそうであるが、パターンはAWKデータ内で検索内容を表し、そして一致が実行見つかった場合、アクションは一連のコマンドです。中括弧({})は、常にプログラムにおいて、それらはグループに特定のパターンに従った一連の命令を使用している表示される必要はありません。パターンは、スラッシュ記号で表すことに正式です。
awk言語の最も基本的な機能は、文書または文字列で指定して情報を抽出する、他のテキスト操作を行うために情報を抽出するためにawkのブラウザベースのルールです。完全なawkスクリプトは、多くの場合、フォーマットされたテキストファイルに情報を使用されています。
通常、awkは処理ユニットを動作ファイルです。AWK文書の各行は、受信された、最初のコマンドを実行してテキストを処理します。
AWKを呼び出すには、3つの方法があります。
-
1 。コマンドライン
-
AWK [-Fフィールドセパレータ] 「コマンド」 インプット ファイル (複数可)
-
[ - Fのフィールド区切り文字]はオプションであり、コマンドは本当にコマンドは、awkはされています。入力- ファイル (S)は、処理するファイルです。
-
AWKでは、それぞれについてフィールドセパレータによって分離された各ラインファイルは、ドメインと呼ばれます。典型的には、名前-Fフィールドデリミタ場合に、デフォルトのフィールド区切り文字はスペースです。
-
-
2 .shellスクリプト
-
awkコマンドはすべて、スクリプトの名前を入力することによって、ファイル、および実行可能なプログラムのawk、awkコマンド・インタープリタと、スクリプトの最初の行として、再び呼び出さを挿入します。
-
シェルスクリプトと同等の最初の行:!#/ビン/ SH
-
#/ binに/ awkは:に置き換えることができます!
-
-
3 。awkコマンドのすべてが別のファイルを挿入し、呼び出すには:
-
AWK -f AWK-script- ファイル 入力- ファイル (複数可)
-
これは、負荷-script-のawkに-fオプション ファイル awkスクリプトでは、入力- ファイル その上で(S)は同じです。
例:
ショーの/ etc / passwdのアカウント
2、#猫/ etc / passwdファイル| awkの-F ':' '' {$ 1}印刷するawkのワークフロー
awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的 域分隔符 -F指定域分隔符为':' (单词域的缩写)。划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户
这种是awk+action的示例,每行都会执行action{print $1}。
如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
3、#awk -F: '/root/' /etc/passwd 搜索/etc/passwd有root关键字的所有行
这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
4、shell编程统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(if语句):
ls -l |awk ' BEGIN { size= 0;print "[ start] size is ", size} {if($5!=4096){size=size+$5;}} END{print "[ end] size is ", size/1024/1024,"M "}' [end]size is 8.22339 M
awk中的条件语句 if 是从C语言中借鉴来的:
-
if (expression) {
-
statement;
-
statement;
-
... ...
-
}
-
-
if (expression) {
-
statement;
-
} else {
-
statement2;
-
}
-
-
if (expression) {
-
statement1;
-
} else if (expression1) {
-
statement2;
-
} else {
-
statement3;
-
}
5、 awk编程
这里没有初始化count,虽然默认是0,但是妥当的做法还是初始化为0:
以M为单位无非就是除于1024再除于1024
-
if (expression) {
-
statement;
-
statement;
-
... ...
-
}
-
-
if (expression) {
-
statement;
-
} else {
-
statement2;
-
}
-
-
if (expression) {
-
statement1;
-
} else if (expression1) {
-
statement2;
-
} else {
-
statement3;
-
}
显示/etc/passwd的账户
-
awk - F ':' ' BEGIN { count= 0;} {name[ count] = $ 1; count++;}; END{ for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
-
0 root
-
1 daemon
-
2 bin
-
3 sys
-
4 sync
-
5 games
-
......