千人の顔は、awkは
HTTPS:// linux.cn/article-11658-1.html 三銃士
| 2019年12月9日午前7時05分コメント: 2 お気に入り: 2
awk
さらにいくつかの計算を行う - また、単純なテキストフィルタのコンテンツを印刷するために抽出されたデータ列を含む、シンプルなコマンド文字列を入力フィルタリング機能を提供するだけでなく。
あなただけ使用した場合 awk
の行の選択、特定のテキストを、あなたはその機能の多くを逃している可能性があります。この記事では、使用して見ていきます awk
あなたはどのような他のいくつかのことを行う手助け、およびいくつかの例を提供することができます。
抽出データ列
awk
最も単純で最も一般的に使用される関数は、データ・ファイルまたはパイプ送信から特定のコンテンツを選択するために設けられています。区切り文字としてデフォルトの使用のスペースが、それは非常に簡単です。
$ echo one two three four five | awk ‘{print $4}’
four
$ who | awk ‘{print $1}’
jdoe
fhenry
これは、スペースのシリーズを参照する space
か、 tab
文字。以下に示すために、awk
設けられた第一及び第四のデータからスクリーニング。
awk
コマンドは、後続の方法でファイル名パラメータを追加することで、テキストファイルからデータを取得することができます。
$ awk '{print $1,$5,$NF}' HelenKellerQuote
The beautiful heart.
(LCTT译注:「世界で最良かつ最も美しいものを見ることができない、あるいは触れ、彼らは心で感じたことがなければなりません。」 - 海伦凯勒)
この例では、awk
最初の行、第5及び最後のフィールドを選択します。
コマンドは、 $NF
選択された各行の最後のフィールドを指定します。これは、ためている NF
分野での彼の党の代表は、フィールドの数の数は、23である、と $NF
されている、そのフィールドの値を表しますheart
。それは、文字列の最後の部分であるため、最終的な結論はまた、に含まれています。
フィールドは、任意の有用な形で印刷することができます。この例では、プリントアウト形式の日付をフィールドします。
$ date | awk '{print $4,$3,$2}'
2019 Nov 22
あなたは省略した場合 awk
、文字列を出力間のコマンドフィールドインジケータカンマが押し出されます。
$ date | awk '{print $4 $3 $2}'
2019Nov21
あなたはカンマを交換する場合、通常はハイフンとして使用され、awk
それは二つのフィールドの値を減算しようとします-おそらくこれはあなたが望むものではありません。これは、出力に挿入され、ハイフンではありません。逆に、それはいくつかの計算を行う出力します。
$ date | awk '{print $4-$3-$2}'
1997
この例では「2019」であろうと日付が「22」を減算し、仲介「-NOVを無視しています。」
あなたは、セパレータとして出力するスペース以外の文字を使用する場合は、次のことができます OFS
(出力フィールドセパレータ区切り文字出力)は、このように、区切り文字を指定します。
$ date | awk '{OFS="-"; print $4,$3,$2}'
2019-Nov-22
単純なテキストを印刷
また、使用することができ awk
、いくつかのテキストを表示するだけ。もちろん、より awk
あなたはもっと使用する場合があります echo
コマンドを。しかし、他の言葉で、と awk
スクリプトの一部、テキストはいくつかの非常に実用的な関連性を表示します。ここでは無用の例です。
$ awk 'BEGIN {print "Hello, World" }'
Hello, World
次の例では、より良いテキストの行を追加するために、識別データタグより合理的です。
$ who | awk 'BEGIN {print "Current logins:"} {print $1}'
Current logins:
shs
nemo
指定されたフィールド区切り文字
セパレータとしてスペースにないすべての入力。区切り記号として別の文字によってテキスト場合(例:カンマ、コロン、セミコロン)は、次のことができます -F
オプション(入力区切り文字)を教えて awk
:
$ cat testfile
a:b:c,d:e
$ awk -F : '{print $2,$3}' testfile
b c,d
以下は、より多くの有用な例である-からコロンで区切られ /etc/passwd
たデータファイルを取得します:
$ awk -F: '{print $1}' /etc/passwd | head -11
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
フィルタの内容
使用することもでき awk
コマンドフィールド評価を。たとえば、あなただけのリストにしたい /etc/passwd
ユーザアカウントで、あなたには、いくつかの3番目のフィールドのスクリーニングを行うことができます。次の例では、我々は以上のUID 1000年の焦点:
$ awk -F":" ' $3 >= 1000 ' /etc/passwd
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash
...
あなたはタイトルの出力を向上させたい場合は、追加することができ BEGIN
句を。
$ awk -F":" 'BEGIN {print "user accounts:"} $3 >= 1000 ' /etc/passwd
user accounts:
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash
あなたはタイトルの複数の行が必要な場合は、することができ "\n"
、出力を分離します:
$ awk -F":" 'BEGIN {print "user accounts\n============="} $3 >= 1000 ' /etc/passwd
user accounts
=============
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash
awkでの数値計算
awk
それは驚くべき数学の能力を提供し、そして、四角開く数えることができ log
、数える tan
、というように。
ここでの例は以下のとおりです。
$ awk 'BEGIN {print sqrt(2019)}'
44.9333
$ awk 'BEGIN {print log(2019)}'
7.61036
詳細学びたい awk
コンピューティングパワーの数学、あなたは「を参照してくださいすることができます使用数学的な計算のawk」の記事を。
awkスクリプト
また、使用することができます awk
別のスクリプトを記述すること。次の例では、模倣体は以前に書き込まれただけでなく、システムアカウントの数を計算しました。
#!/usr/bin/awk -f
# 这一行是注释
BEGIN {
printf "%s\n","User accounts:"
print "=============="
FS=":"
n=0
}
# 现在开始遍历数据
{
if ($3 >= 1000) {
print $1
n ++
}
}
END {
print "=============="
print n " accounts"
}
注 BEGIN
セクションでは、フィールドセパレータを指定して、タイトルを提供することであり、カウンタが初期化され、それが唯一のスクリプトの初期化期間に行われますか。スクリプトも含まれている END
中間コマンドの処理が完了し、すべての後にのみ実行セクションを、全てのフィルタデータの中間セクションの行の最後の数(第3のフィールド1000以上)。
永遠のUnixコマンドの上として、awk
まだ私はUnixのの数十年前と恋に落ちた理由の一つである非常に便利なサービスを、提供しています。
経由: https://www.networkworld.com/article/3454979/the-many-faces-of-awk.html
著者:サンドラヘンリー・ストッカーの トピック:lujun9972の 翻訳:LuuMing 校正:WXY