ホームページ > php教程 > PHP开发 > awkコマンドの詳しい説明

awkコマンドの詳しい説明

高洛峰
リリース: 2016-12-15 10:36:23
オリジナル
1330 人が閲覧しました

awkコマンドの詳しい説明

簡単な使い方:

awk: ファイルの各行に対して操作を実行します。

awk -F: '{print $1,$4}' : ':' を使用してこの行を分割し、この行の最初と 4 番目のフィールドを出力します。

詳細な紹介:

AWK コマンドの概要

awk 言語の最も基本的な機能は、ファイルまたは文字列内の指定されたルールに基づいて情報を参照および抽出することです。awk が情報を抽出した後でのみ、他のテキスト操作を実行できます。完全な awk スクリプトは通常、テキスト ファイル内の情報をフォーマットするために使用されます

1. awk:

の最初のコマンド ライン メソッドを呼び出します。

コマンド' input-file(s)

ここでのコマンドは実際の awk コマンドです。[-F field separator] はオプションです。awk はデフォルトでスペースを使用して区切ります。そのため、フィールド間にスペースのあるテキストを参照したい場合は、このオプションを指定する必要はありませんが、passwd ファイルを参照する場合は、このファイルの各フィールドで区切り文字としてコロンが使用されているため、-F オプションを使用する必要があります: awk -F : 'commands' input-file

2 番目に、すべての awk コマンドを 1 つのファイルに挿入し、awk プログラムを実行可能にしてから、スクリプトの最初の行として awk コマンド インタープリタを使用して、スクリプト名を入力して呼び出すことができるようにします

3 番目の方法は、すべての awk コマンドを別のファイルに保存してから、次のように呼び出します。

awk -f awk-script-file input-file

-f オプションは、ファイル awk-script-file 内の awk スクリプトを指定します, input-file は、awk を使用して参照されるファイル名です

2. awk script:

awk スクリプトは、区切り文字 (-F オプション) に応じて、さまざまな操作とモードで構成されます。読み取られた内容は対応するフィールドに順番に配置され、ファイルの終わりまでレコードが 1 行ずつ読み取られます

2.1. パターンとアクション

awk ステートメントはパターンとアクションで構成されます。 awk スクリプトには多くのステートメントが含まれる場合があります。モード部分は、アクション ステートメントがいつ起動され、イベントがトリガーされるかを決定します。アクションはデータに対する操作です。パターン部分を省略すると、アクションは常に実行されたままになります

パターンには、2 つの特別なフィールド BEGIN と END が含まれます。 BEGIN このステートメントは、テキスト参照アクションの前にカウントと印刷ヘッドを設定し、その後、入力ファイルに基づいてテキスト参照アクションの実行を開始します。END ステートメントは、テキストの合計数と末尾を印刷するために使用されます。 awk がテキスト参照アクションを完了した後のステータス フラグ。アクションは、

を囲むために {} を使用する必要があります。実際のアクションは、印刷アクションによく使用される中括弧 {} で指定されますが、if や などの長いコードもあります。実行するアクションを指定しない場合、awk は参照されたすべてのレコードを出力します

2.2. awk が実行されると、その参照タグは $1、 $2...$n、この方法はドメインタグ付けと呼ばれます。 1 番目と 3 番目のフィールドを参照するには、$1 と $3 を使用します。フィールドの区切りにはカンマが使用され、$0 はすべてのフィールドを使用することを意味します。例:

awk '{print $0}' temp.txt > sav.txt

は、すべてのフィールドを出力し、結果を sav.txt にリダイレクトすることを意味します

awk '{print $0}' temp.txt|tee sav.txt

上の例と同様ですが、画面に表示される点が異なります

awk '{print $1,$4}' temp.txt

Only最初のものは 1 番目と 4 番目のドメインが出力されます

awk 'BEGIN {print "NAME GRADEn----"} {print $1"t"$4}' temp.txt

はヘッダー、つまりヘッダーを示します、入力内容を行の前に「NAME GRADEn-------------」を追加し、内容をタブで区切ります

awk 'BEGIN {print "being"} {print $1} END {print "end "}' temp

メッセージのヘッダーと末尾を同時に出力します

2.3. 条件演算子:

=、~ は正規表現に一致します。 式、!~ は正規表現に一致しません

一致: awk '{if ($4~/ASIMA/) print $0}' temp は、4 番目のフィールドに ASIMA が含まれている場合、print を意味します。

全体

完全一致 :awk '$3=="48" {print $0}' temp 3 番目のフィールドが "48" に等しいレコードのみを出力します

一致しません: awk '$0 !~ /ASIMA /' temp ASIMA レコードなしでレコード全体を出力します

以下に等しくない: awk '$1 != "asima"' temp

以下: awk '{if ($1

ケースを設定: awk '/[Gg]reen/' temp 緑または緑を含むレコード全体を出力します

任意の文字: awk '$1 ~/^...a/' temp 最初のフィールドの 4 番目の文字が a であるレコードを出力します。記号 '^' は行の先頭を表し、'.' は行の先頭を表します。任意の文字

またはリレーショナル マッチング: awk '$0~/(abc)|(efg)/' temp | を使用する場合、ステートメントを囲む必要があります

AND およびリレーショナル: awk '{if ( $1= ="a" && $2=="b" ) print $0}' temp

または: awk '{if ($1=="a" || $1=="b") print $0}' temp

2.4 . awk 組み込み変数:

awkコマンドの詳しい説明

例: awk 'END {print NR}' temp 読み取ったレコードの数を最後に出力します

awk '{print NF, NR, $0} END {print FILENAME}' temp

awk '{if (NR>0 && $4~/Brown/) print $0}' temp 少なくとも 1 つのレコードがあり、Brown が含まれています

NF の別の使用法: echo $ PWD | awk -F/ ' {print $NF}' 現在のディレクトリ名を表示します

awk の演算子は、数値、文字列、変数、およびフィールドに分割できます。配列要素

入力フィールドを変数名に設定します:

awk '{name=$1;six=$3; if (six=="man") print name " is " six}' temp

field 値の比較操作:

awk 'BEGIN {BASE="27"} {if ($4

数値フィールドの値を変更します: (元の入力ファイルは変更できません)

awk '{if ($1=="asima") $6=$6-1;print $1, $6, $7}' temp

テキストフィールドを変更します:

awk '{ if ($1= ="asima) ($1=="desc");print $1}' temp

変更レコードのみを表示: (必要なもののみを表示し、前のコマンドと区別し、{} に注意してください)

awk '{ if ($1=="asima) {$1=="desc";print$1}}' temp

新しい出力フィールドを作成します:

awk '{$4=$3- $2; print $4}' temp

統計列の値:

awk '(tot+=$3);END {print tot}' temp は各列の内容を表示します

awk '{(tot+ =$3)};END {print tot}' temp 最終結果のみが表示されます

ファイルの長さを追加します:

ls -l|awk '/^[^d]/ {print $9"t" $5} {tot+=$5} END{ print "totKB:" tot}'

ファイル名のみがリストされます:

ls -l|awk '{print $9}' 通常、ファイル名は 9 番目です。ドメイン

2.6. awk 組み込み文字列関数:

gsub(r, s) $0 全体で r を s に置き換えます

awk 'gsub(/name/,"xingming") {print $0 }' temp

gsub(r , s, t) t全体のrをsに置き換えます

index(s, t) s内の文字列tの最初の位置を返します

awk 'BEGIN {print index("Sunny", "ny ")}' temp 4

length(s) を返します s

match(s, r) の長さを返します s に r

に一致する文字列が含まれているかどうかをテストします

awk '$1=="J. Lulu" {print match($1, "u")}' temp Return 4

split(s, a, fs) sをfs上のシーケンスaに分割する

awk 'BEGIN {print Split("12 #345#6789",myarray,"#")"'

myarray[1]="12"、myarray[2]="345"、myarray[3]="6789" の場合は 3 を返します

sprint(fmt, exp) fmt

によってフォーマットされた exp を返します

sub(r, s) $0 の左端の最長部分文字列から r を s に置き換えます (最初に一致する文字列のみを置き換えます)

substr(s, p) 文字列 s を返します p から始まる接尾語部分

substr(s, p, n) 文字列 s の p から始まる長さ n のサフィックス部分を返します

2.7. printf 関数の使用:

文字変換: echo "65" |awk '{printf " %cn",$0}' Output A

{ printf "%-15s %sn", $1, $3}'temp は最初のフィールドをすべて左揃えで表示します

2.8. その他の awk の使用法:

awk コマンドの行に値を渡す:

awk '{if ($5

who | awk '{if ($1==user) print $1 " are in " $2 ' user=$LOGNAME 環境変数を使用します

awk スクリプト コマンド:

この文がないと、自己完結型スクリプトは実行されません。例:

!/bin/awk -f

# すべてのコメント行はハッシュ '#' で始まる必要があります

# name:student_tot.awk

# を呼び出す。 awk Grade.txt

# クラブ生徒のポイントの合計と平均を出力します

# 最初にヘッダーを出力します

BEGIN

{

print "生徒の日付 会員番号 学年 年齢 ポイントMax"

print "名前が参加して獲得したポイントが利用可能"

print "============================== ==================== ========"

}

#獲得したポイントのスコアを加算しましょう

(tot+=$6);

# 処理が完了しました。合計と平均ポイントを出力しましょう

END

{

print "クラブ生徒の合計ポイント:" tot

print "平均クラブ学生ポイント:" tot/N

}

2.9. awk 配列:

awk の基本的なループ構造

For (配列内の要素) print array[element]

awk 'BEGIN {record="123#456#789";split(record, myarray , "#")}

END { for (i in myarray) {print myarray[i]} }

3.0 awkのカスタムステートメント

1. 条件判定ステートメント(if)

if(式) #if(配列内の変数)

ステートメント1

else

ステートメント2


「ステートメント1」の形式Unix awk の判断を容易にし、自分自身の読み取りを容易にしたい場合は、複数のステートメントを {} で囲むのが最善です。 Unix awk ブランチ構造ではネストが可能で、その形式は次のとおりです:

if(式)

{ステートメント 1}

else if(式)

{ステートメント 2}

else

{ステートメント 3}


[chengmo @localhost nginx ]# awk 'BEGIN{
test=100;
if(test>90)

{

print "非常に良い";
}
else if(test>60)
{
print "good";
}
else
{
print "no pass";
}
}'

とても良い

各コマンドステートメントは「;」記号で終了できます。

2. ループステートメント (while、for、do)

1. while ステートメント

形式:

while (式)

{ステートメント}

例:

[chengmo@localhost nginx]# awk 'BEGIN{

test=100;

total=0;

while(i{
total+=i;
i++;
}
print total;
}'
5050

2.forループ

for ループには 2 つの形式があります:

形式 1:

for (配列内の変数)

{ステートメント}

例:

[chengmo@localhost nginx]# awk 'BEGIN{

for(k in ENVIRON)

{

print k"="ENVIRON[k];

}
}'

AWKPATH=.:/usr/share/awk
OLDPWD=/home/web97
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh -askpass

SELINUX_LEVEL_REQUESTED=

SELINUX_ROLE_REQUESTED=
LANG=zh_CN.GB2312

。 。 。 。 。 。

説明: ENVIRON は awk 定数であり、準典型的な配列です。

形式 2:

for (変数; 条件; 式)

{ステートメント}

例:

[chengmo@localhost nginx]# awk 'BEGIN{
total=0;
for(i=0; i< ;=100;i++)
{
total+=i;
}
print total;
}'

5050

3.doループ

書式:

do

{文}while(条件)

例:

[chengmo@localhost nginx]# awk 'BEGIN{
total=0;
i=0;
do
{
total+=i;
i++;
}while(i合計を出力します。 }'
5050

上記は awk のフロー制御ステートメントであり、構文からは C 言語と同じであることがわかります。これらのステートメントを使用すると、多くのシェル プログラムを実際に awk に引き渡すことができ、パフォーマンスが非常に高速になります。

awkコマンドの詳しい説明


awk コマンドの詳細な説明と関連記事については、PHP 中国語 Web サイトに注目してください。

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