(7)awkコマンド(Linuxコマンド毎週シリーズ)

簡単な紹介

比較的良好なログファイル形式を扱うときにawkは特に、強力なテキスト分析ツールで、awkは(あなたはまた、区切り文字を指定することができます)それぞれのデフォルトの区切り文字のためのスペースと、それは単純に行毎にファイルを読み込む置くことですスライス加工ライン。

文法

awk [选项参数] 'script' var=value file(s)
awk [选项参数] -f scriptfile var=value file(s)

awkのワークフロー

awkのワークフローがあるようです:フィルイン読みが記録改行は「N \」分離され、その後、ドメインに指定したフィールドの区切り文字に記録されて、フィールド、$ 0がすべてのドメインを示してレコード全体(これと規則的です同様のアウト一致)、$ 1は、第1フィールドを表し、$ nは、n番目のフィールドを意味します。デフォルトのフィールド区切り文字はもちろん、区切り文字を指定することができ、スペースです。

オプションのパラメータ説明:

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-f scripfile or --file scriptfile
从脚本文件中读取awk命令

-v var=value or --asign var=value
赋值一个用户定义变量。

分析:-F指定シートセパレータ結腸各行、コンマで分離された第1のスライスと最後から二番目の中間体断片の出力

 
 //假设我们要输出supervisor这个程序的进程号 ,这个命令配合xargs可以方便于结束某些进程
 ps -ef|grep 'supervisor'|awk '{print $2}'
 //输出
 1630
 
 
 比如有如下文件ip.txt

1  134.102.173.43

2  134.102.173.43

3  134.102.171.42

4  134.102.170.9

要统计出现次数最多的IP可以利用以下shell脚本:

cat ip.txt | awk '{print $2}' | sort | uniq -c | sort -n -r | head -n 1

最后如果不加head这一组可以统计从多到少的列表

解像度:

AWK '{$ 5印刷}':データへのアクセスの低5ドメイン(カラム5)

ソート:ソートのIP部分。

UNIQ -c:各重複行が表示される数を印刷します。(そして、重複行を削除します)

ソート-n -r:重複行の発生の降順に配置されています。

ヘッド-n 5:トップ5 IPを取ります

組み込み変数


ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览的当前行中分片的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

{印刷$(NF-1)}最後から二番目の印刷断片である場合、NF使用されています

以下では、例の目的のために、我々はdemo.txtに/ etc / passwdファイルを保存します。

root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

例:
`` `

$のAWKの-Fは、 ':' '' demo.txt {$ 1、$(NF-1)を印刷します}


## 函数
awk还提供了一些内置函数,方便对原始数据的处理。

TOUPPER():大文字の文字に。
TOLOWER():小文字。
長さは、():文字列の長さを返します。
SUBSTR()は:サブストリングを返します。
罪():正弦波。
COS():コサイン。
SQRT():平方根。
ランド():乱数。


示例:

$のAWKの-F ':' '{印刷TOUPPER($ 1)}' demo.txt


## 条件表达式
awk允许指定输出条件,只输出符合条件的行。

USRを含む行の出力のみ。

$のAWKの-F ':' 'は/ usr / {$ 1印刷}' demo.txt

奇数ライン出力

$のAWKの-F '' 'NR%2 == 1 {$ 1を印刷}' demo.txt
ルート
ビン
同期

行の後の第3行目の出力

$のAWKの-Fは、 ':' 'demo.txt'> 3 {$ 1印刷} NR
SYSの
同期

指定された最初のフィールドラインに等しい出力値の次の例

$のawkの-F ':' '$ 1 == "ルート"' demo.txt {$ 1}印刷
ルート

$のawkの-F ':'「$ 1 == "ルート" || $ 1 == "ビン" {$ 1印刷}」demo.txt
ルート
ビン


## if 语句
awk提供了if结构,用于编写复杂的条件,if结构还可以指定else部分

行の最初の文字の最初のフィールドの出力がmよりも大きいです。

$のAWKの-F ':' '{IF($ 1>の"M")$ 1 [プリント画像}' demo.txt
ルート
SYSの
同期

それは他の人の含み

$のAWKの-F ':'「{($ 1> "M")が$ 1印刷する場合。他の印刷"---"}」demo.txt
ルート
---
---
SYSの
同期

`` `

この記事のいくつかの例では、教師遼雪峰の記事から来ています

おすすめ

転載: www.cnblogs.com/vinter/p/10926598.html