多くの人がLinuxawkコマンドを使用したと思いますが、実際にそれを研究している人は多くありません。私たちのほとんどがBaiduのプログラミングをしているからです。今日はそれについて簡単に話します。
グーグルで調べたところ、二大神の記事が見つかりました。多くの人が知っていると思います。
私の記事は参考として彼らの記事に基づいており、いくつかのコンテンツを追加しました。
Awkはテキストファイルを処理するためのアプリケーションであり、ほとんどすべてのLinuxシステムにこのプログラムが付属しています。
AWKと呼ばれるのは、3人の創設者であるAlfred Aho、Peter Weinberger、BrianKernighanの家系の名前の最初の文字を使用しているためです。
awk構文
awk [オプションパラメーター] 'script' var = valuefile (s)
または
awk [オプションパラメーター] -f scriptfile var = value file(s)
オプションパラメータの説明:
- -Ffsまたは--field-separatorfs
入力ファイルの区切り文字を指定します。fsは文字列または-F:などの正規表現です。
- -v var = valueまたは--asignvar = value
ユーザー定義変数を割り当てます。
- -fscripfileまたは--filescriptfile
スクリプトファイルからawkコマンドを読み取ります。
- -mfnnnおよび-mrnnn
nnnの値に固有の制限を設定します。-mfオプションはnnnに割り当てられるブロックの最大数を制限し、-mrオプションはレコードの最大数を制限します。これらの2つの機能は、ベル研究所バージョンのawkの拡張機能であり、標準のawkには適用されません。
- -Wコンパクトまたは--compat、-Wトラディショナルまたは--traditional
互換モードでawkを実行します。したがって、gawkは標準のawkとまったく同じように動作し、すべてのawk拡張機能は無視されます。
- -W copyleftまたは--copyleft、-Wcopyrightまたは--copyright
短い著作権情報を印刷します。
- -Wヘルプまたは--help、-W使用法または--usage
すべてのawkオプションと各オプションの簡単な説明を印刷します。
- -Wlintまたは--lint
従来のUNIXプラットフォームに移植できない構造に関する警告を出力します。
- Wlint-oldまたは--lint-old
従来のUNIXプラットフォームに移植できない構造に関する警告を出力します。
- -W posix
互換モードをオンにします。ただし、認識されない次の制限があります。/x、関数キーワード、func、エスケープシーケンス、およびfsがスペースの場合、改行はフィールド区切り文字として使用されます。演算子と=は^と^ =を置き換えることはできません。は無効です。
-Wre-intervalまたは--re-inerval
間隔正規表現の使用を許可します。ブラケット式[[:alpha:]]などの(grepのPosix文字クラス)を参照してください。
-W sourceprogram-textまたは--sourceprogram-text
プログラムテキストをソースコードとして使用します。これは、-fコマンドと組み合わせることができます。
-Wバージョンまたは--version
バグレポート情報のバージョンを印刷します。
基本的な使い方
xttblog.txtファイルの内容を例として取り上げましょう。
2
これ
はテストです
3
あなたはawkが好きですか
5
WWW
。
Xttblog
。
COM
、アマチュア草
この
'
saテスト
10
オレンジ
、
リンゴ
、
モンゴがあります
awk '{print $ 1、$ 4}' xttblog.txtコマンドを実行すると、次のコンテンツが表示されます。
上記の例では、各行がスペースまたはTABで分割され、出力テキストの項目1と4が出力されます。awk '{printf "%-8s%-10s \ n"、$ 1、$ 4}' xttblog.txtは、出力コンテンツのフォーマットされた表示用です。
区切り文字を指定する例を見てみましょう。
awk -F#-Fは組み込み変数FSと同等であり、分割文字を指定します
「、」を使用して分割します。
$ awk
F
、
'{print $ 1、$ 2}'
xttblog
。
txt
2
この
ある
テスト
3
あなたはawkが好きですか
5
WWW
。
Xttblog
。
Comのの
アマチュア草
これ
はテストです
10オレンジアップルがあります
組み込み変数を使用します。
$ awk'BEGIN
{FS = "、"} {print $ 1、$ 2} '
xttblog
。
txt
2
この
ある
テスト
3
あなたはawkが好きですか
5
WWW
。
Xttblog
。
Comのの
アマチュア草
これ
はテストです
10オレンジアップルがあります
複数の区切り文字を使用します。スペースを使用して最初に除算し、次に「、」を使用して除算の結果を除算します。
$ awk
F
'[、]'
'{print $ 1、$ 2、$ 5}'
xttblog
。
txt
2
この
テスト
3
ある
AWK
5
WWW
。
xttblog
。
com
これ
は
10そこにリンゴ
設定変数の使い方を見てみましょう。変数を設定するには、awk-vを使用します
$ awk
va
1
'{print $ 1、$ 1 + a}'
xttblog
。
txt
2
3
3
4
5
6
これは
1
10 11
2つの変数を設定する例。
$ awk
va
1
-
VB
s
'{print $ 1、$ 1 + a、$ 1b}'
xttblog
。
txt
2
3
2秒
3
4
3秒
5
6
5秒
これは
1これは
ss
10
11
10秒
awkの力は、そのawkスクリプトにあります。
$ awk -f {awkスクリプト} {ファイル名}
オペレーターも同時にサポートされます。
例:最初の列が2より大きい行をフィルター処理します。
$ awk
'$ 1>
2'xttblog
。
txt
3
あなたはawkが好きですか
5
WWW
。
Xttblog
。
COM
、アマチュア草
これ
はテストです
10オレンジ、リンゴ、モンゴがあります
最初の列が2に等しい行をフィルタリングします。
$ awk
'$ 1 == 2 {print $ 1、$ 3}'
xttblog
。
txt
2
です
最初の列が2より大きく、2番目の列が「Are」に等しい行をフィルタリングします。
$ awk
'$ 1> 2 && $ 2 == "Are" {print $ 1、$ 2、$ 3}'
xttblog
。
txt
3
ある
あなたは、
Awkは組み込み変数もサポートしています。
$ awk'BEGIN
{printf "%4s%4s%4s%4s%4s%4s%4s%4s%4s \ n"、 "FILENAME"、 "ARGC"、 "FNR"、 "FS"、 "NF"、 " NR "、" OFS "、" ORS "、" RS "; printf" --------------------------------- ------------ \ n "} {printf"%4s%4s%4s%4s%4s%4s%4s%4s%4s \ n "、FILENAME、ARGC、FNR、FS、NF 、NR、OFS、ORS、RS} '
xttblog
。
txt
ファイル名ARGCFNR FS NF NR OFS ORS RS
xttblog
。
txt
2
1
5
1
xttblog
。
txt
2
2
5
2
xttblog
。
txt
2
3
2
3
xttblog
。
txt
2
4
3
4
xttblog
。
txt
2
5
4
5
テキスト行番号と一致するシーケンス番号NRを出力します。
$ awk
'{print NR、FNR、$ 1、$ 2、$ 3}'
xttblog
。
txt
1
1
2
この
です
2
2
3
ある
あなたは、
3
3
5
WWW
。
Xttblog
。
COM
、アマチュア草
4
4
これ
はテストです
5 510あります
出力区切り文字を指定します。
$ awk
'{print $ 1、$ 2、$ 5}'
OFS
"$"
xttblog
。
txt
2
$
この
$テスト
3
$
は
$ awkです
5
$のWWW
。
Xttblog
。
Comの
、アマチュア草
$
これは
$ a $
10 $あり$
Awkは、通常の文字列照合もサポートしています。
2番目の列に「th」が含まれていることを出力し、2番目と4番目の列を出力します。
$ awk
'$ 2〜 / th / {print $ 2、$ 4}'
xttblog
。
txt
これ
は
上記のコマンドで、〜はモードが開始することを意味します。//真ん中がモードです。
出力に「、」が含まれている別の行を見てみましょう。
$ awk
'/、/'
xttblog
。
txt
5
WWW
。
Xttblog
。
COM
、アマチュア草
10
オレンジ
、
リンゴ
、
モンゴがあります
Awkは大文字と小文字を区別しません。
$ awk'BEGIN
{IGNORECASE = 1} / this / '
xttblog
。
txt
2
この
ある
テスト
awkモードが逆になります。
$ awk
'$ 2!〜/ th / {print $ 2、$ 4}'
xttblog
。
txt
の
ような
WWW
。
xttblog
。
COM
、アマチュア草
a
そこに
オレンジ
、
リンゴ
、
モンゴ
$ awk
'!/ th / {print $ 2、$ 4}'
xttblog
。
txt
の
ような
WWW
。
xttblog
。
COM
、アマチュア草
a
そこに
オレンジ
、
リンゴ
、
モンゴ
Awkはawkスクリプトもサポートしています。スクリプトファイルは.awkで終わります。
awkスクリプトには、2つの重要なキーワードBEGINとENDがあります。
BEGIN {これは実行前のステートメントです}
END {これはすべての行を処理した後に実行されるステートメントです}
{各行を処理するときに実行されるステートメントは次のとおりです
簡単なxttblog.awkスクリプトを見てみましょう。
#!/ bin / awk -f
#前に実行
ベギン
{{
math
=
0
english
=
0
computer
=
0
printf
「名前番号数学英語コンピュータ合計\ n」
printf
"--------------------------------------------- \ n"
}
#ランニング
{{
math
+ =
$ 3
english
+ =
$ 4
computer
+ =
$ 5
printf
"%-6s%-6s%4d%8d%8d%8d \ n"
、
$ 1
、
$ 2
、
$ 3
、
$ 4
、
$ 5
、
$ 3
+
$ 4
+
$ 5
}
#実行後
終わり
{{
printf
"--------------------------------------------- \ n"
printf
"合計:%10d%8d%8d \ n"
、
数学
、
英語
、
コンピューター
printf
"平均:%10.2f%8.2f%8.2f \ n"
、
数学
/
NR
、
英語
/
NR
、
コンピューター
/
NR
}
このスクリプトには多くのコードが含まれているようです。helloworldスクリプトを見てみましょう。
エコー
|
awk
'{print "Hello、World!"}'
エコー
|
awk'BEGIN
{print "Hello、World!"} '
awk'BEGIN
{print "Hello、World!"} '
echo
"hello world"
|
awk
'{print}'
Awkは非常に強力で、運用と保守に適しており、Java開発者は学ぶことができます。この記事を集めることをお勧めします!