*只顾: awk的表明式要求动用单引号”

本章主要学习内容

  • awk介绍 
  • awk基本用法 
  • awk变量 
  • awk格式化 
  • awk操作符 
  • awk条件判断 
  • awk循环 
  • awk数组 
  • awk函数 
  • 调用系统命令

 awk学习 

grep

文本搜索工具,依照用户钦赐的“情势”对指标文本逐行实行匹配检查;打字与印刷匹配到的行

grep [OPTIONS] PATTERN [FILE…]

  • –color=auto: 对金童玉女到的文本着色展现 
  • -v: 展现不被pattern匹配到的行
  • -i: 忽略字符大小写
  • -n: 显示匹配的行号
  • -c: 计算匹配的行数
  • -o: 仅突显匹配到的字符串
  • -q: 静默方式,不出口任何新闻 
  • -A #: after, 呈现匹配到的行和后#行
  • -B #: before, 展现匹配到的行和前#行
  • -C #:context, 展现匹配到的行和前后各#行
  • -e: 落成多个选取间的逻辑or关系。grep –e ‘cat ’ -e ‘dog’ file 
  • -w: 整行匹配整个单词
  • -E: 使用扩大正则表明式
  • -F: 约等于fgrep,不协理正则表明式

awk:编辑器(主要处理有规律的公文)

一.awk介绍

(一)awk:Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 
有各类版本:New awk(nawk),GNU awk( gawk) 
gawk:形式扫描和处理语言 
着力用法: awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;…
}’ file …
awk 程序日常由:BEGIN语句块、能够使用格局匹配的通用语句块
、END语句块,共3局地组成 program常常是被单引号或双引号中
例: awk ‘{print 25}’ /etc/passwd

澳门金沙国际 1

image.png

引入BEGIN,END
例:awk ‘BEGIN{print 35}’ /etc/passwd

澳门金沙国际 2

image.png

awk ‘END{print 35}’ /etc/passwd

选项:
-F 指明输入时用到的字段分隔符
-v var=value: 自定义变量
(贰)基本格式:awk [options] ‘program’ file… 
program:pattern{action statements;..}
pattern和action:
• pattern部分决定动作语句曾几何时触发及触发事件
BEGIN,END
• action statements对数码举办拍卖,放在{}内指明 print, printf 
分割符、域和笔录
• awk执行时,由分隔符分隔的字段(域)标记$一,$2..$n称
为域标识。$0为全部域,注意:和shell中变量$符含义区别
• 文件的每一行称为记录 • 省略action,则默许执行 print $0 的操作

原文:

sed

sed是一种流编辑器,它1次拍卖一行内容。处理时,把当前处理的行存款和储蓄在权且缓冲区中,称为“格局空间”(
pattern space),接着用sed命令处理缓冲区中的内容
,处理完结后,把缓冲区的剧情送往荧屏。接着处理下1行,那样持续重复,直到文件末尾。文件内容并未改变
,除非您利用重定向存款和储蓄输出。Sed首要用以自动编辑3个或多个公文,简化对文本的屡屡操作,编写转换程序等

sed [option]… script inputfile…

  • -n: 不出口方式空间内容到荧屏,即不自行打字与印刷
  • -e: 多点编辑
  • -f: /PATH/SCRIPT_FILE: 从钦定文件中读取编辑脚本 
  • -r: 辅助接纳扩充正则表明式
  • -i: 原处编辑
  • -i.bak: 原处编辑,编辑前复制源文件为源文件名称+.bak后缀

先后模型:

打印:awk ‘{print}’ a.txt
打字与印刷内定内容:awk ‘{print “hello”,5}’ a.txt
i++代表先赋值再加一
++i代表先加一再赋值
awk ‘BEGIN{i=6}{print ++i}’ a.txt
awk ‘BEGIN{i=6}{print i++}’ a.txt
BEGIN读入文本之前的操作
awk ‘{print i++}END{print “hhh”}’ a.txt
END读入文本之后的操作

二.awk工作规律

  • 首先步:执行BEGIN{action;… }语句块中的语句 
  • 其次步:从文件或专业输入(stdin)读取一行,然后实施pattern{ action;…
    }语句块,它逐行扫描文件,从第二行到终极一行再一次这么些进程,直到文件全部被读取达成。
  • 其三步:当读至输入流末尾时,执行END{action;…}语句块 
  • BEGIN语句块在awk先河从输入流中读取行在此之前被实践,那是贰个可选的语句块,比如变量发轫化、打字与印刷输出表格的表头等话语平时能够写在BEGIN语句块中
  • END语句块在awk从输入流中读取完全数的行之后即被执行,比如
    打字与印刷全部行的分析结果这类音讯汇聚都以在END语句块中做到,它
    也是1个可选语句块 
  • pattern语句块中的通用命令是最要害的有的,也是可选的。如若未有提供pattern语句块,则暗中同意执行{ print },即打字与印刷每二个读取
    到的行,awk读取的每1行都会履行该语句块
  • print格式:print item1, item2, … 
    要点:
    (一) 逗号分隔符
    (二) 输出的各item能够字符串,也得以是数值;当前记录的字段、
    变量或awk的表达式
    (3) 如省略item,相当于print $0

示例:

(1)awk ‘{print “welcome to magedu”}’

澳门金沙国际 3

image.png

(2) awk -F: ‘{print $一,$叁}’ /etc/passwd——暗中认可以空格为分隔符

澳门金沙国际 4

image.png

(3)awk -F: ‘{print $一”:”$三}’ /etc/passwd——钦点以“:”为分隔符

澳门金沙国际 5

image.png

(四) awk -F: ‘{print “magedu”}’
/etc/passwd——在/etc/passwd的每一行都打字与印刷”magedu”

澳门金沙国际 6

image.png

(五)awk -F: ‘{print}’ /etc/fstab——不写$壹…..$n意味暗许打字与印刷$0

澳门金沙国际 7

image.png

(6)awk -F: ‘{print $1}’

澳门金沙国际 8

image.png

script=地址定界+编辑命令

情势匹配:

当匹配到//里的正则表达式后才实施前边命令
awk ‘/aaa/{print ++i,”hhh”}’ a.txt
打印第三个和第三个字段:$0表示拥有
awk ‘{print $1,$2}’ a.txt
点名字段变量:
awk ‘BEGIN{a=2}{print $a}’ a.txt

awk -F ‘;’ ‘{}’
-F钦点分隔符
\n 换行符
\t TAB键
\r 回车

三.awk变量

  • 变量:内置和自定义变量 
  • FS:输入字段分隔符,暗中认可为空白字符
    awk -v FS=’:’ ‘{print $1,FS,$3}’ /etc/passwd
    例:
    fs=”:” ; awk -v FS=$fs ‘{print $1,FS,$3}’ /etc/passwd

    澳门金沙国际 9

    image.png

  • OFS:输出字段分隔符,私下认可为空白字符

    fs=”:”; awk -v FS=$fs -v OFS=”++++” ‘{print$1,$3}’ /etc/passwd

    澳门金沙国际 10

    image.png

    SportageS:输入记录分隔符,钦命输入时的换行符,原换行符仍有效 

    例子:

    澳门金沙国际 11

    image.png

    OXC90S:输出记录分隔符,输出时用钦命符号代替换行符
    例子:awk -v RS=”;” -v ORS=”####” ‘{print $1,$3}’ aaa.txt

    澳门金沙国际 12

    image.png

    NF:字段数量

    awk -F: ‘{print NF}’ /etc/passwd

    澳门金沙国际 13

    image.png

    awk -F : ‘{print $(NF-1)}’ /etc/passwd

    澳门金沙国际 14

    image.png

    NR:行号
    awk -F: ‘{print NR}’ /etc/passwd

    澳门金沙国际 15

    image.png

    给/etc/fstab文印行号
    awk ‘{print NR, $0}’ /etc/fstab

    澳门金沙国际 16

    image.png

    FN奥迪Q三:各文件分别计数,行号
    ——效果正是借使同时读取三个公文时,能够分别进行计数打字与印刷行号,假设用N瑞鹰则会将八个文本累加打字与印刷
    例:
    awk ‘{print NR}’ /etc/fstab /etc/inittab

    澳门金沙国际 17

    image.png

    使用FNHighlander则会一蹴而就该难点
    awk ‘{print FNR}’ /etc/fstab /etc/inittab

    澳门金沙国际 18

    image.png

    FILENAME:当前文件名
    awk ‘{print FILENAME,NR,$0}’ /etc/fstab

    澳门金沙国际 19

    image.png

    A中华VGC:命令行参数的个数
    awk ‘{print ARGC}’ /etc/fstab /etc/inittab
    awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab

    澳门金沙国际 20

    image.png

    A大切诺基GV:数组,保存的是命令行所给定的各参数
    awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab

    澳门金沙国际 21

    image.png

    awk ‘BEGIN {print ARGV[1]}’ /etc/fstab
    /etc/inittab——代表第一参数,为/etc/fstab

  • awk变量
    自定义变量(区分字符大小写)
    (1) -v var=value
    (二) 在program中央直机关接定义 
    示例:
    awk -v name=”zhang” ‘{print name }’ /etc/fstab

    澳门金沙国际 22

    image.png

    awk -v name=”zhang” ‘BEGIN{print name, “is ceo” }

    澳门金沙国际 23

    image.png

    也得以直接在{}里面定义
    awk ‘{sex=male;age=18;print sex,age}’ aaa.txt

    澳门金沙国际 24

    image.png

    小心:{print sex ,age ;age=18},打字与印刷出来的效益是第三行不打字与印刷年龄

    澳门金沙国际 25

    image.png

    也辅助调用文件来促成
    vim aaa.txt
    {sex=”male”;age=18;print $1,male,age}

    awk -F: -f aaa.txt /etc/passwd

    澳门金沙国际 26

    image.png

原理是先赋值后定义,不然会并发局地荒唐

awk是行处理器:
相相比显示器处理的长处,在处理庞大文件时不会现出内部存款和储蓄器溢出或许处理缓慢的难题,经常用来格式化文本消息

地方定界
  • 不给地点:对全文实行处理 
  • 单地址:
    • #: 钦点的行
    • /pattern/:被那里方式所能够同盟到的每①行 
  • 地点范围:
    • #,#: 
    • #,+# 
    • /pat1/,/pat2/ 
    • #,/pat1/
  • ~:步进
    • 1~二: 从一初步,步进2,表示奇数行
    • 2~2 从二起来,步进二,表示偶数行

表达式:

常量:数字和字符串型
字符串型在表明式中务必用引号括起来
字符串中得以选取转义种类,常用的转义类别有:
\n 换行 \t 水平制表符 \r 回车

赋值操作符:
++ i++=i+1
— i–=i-1

四.awk中的printf命令

格式化输出:printf “FOEscortMAT”, item1, item2, …

  • (一) 必须钦赐FOEscortMAT
  • (贰) 不会自动换行,要求显式给出换行控制符,\n
  • (3) FOTiggoMAT中需求各自为前面各样item钦点格式符 
    格式符:与item壹壹对应
    %c: 展现字符的ASCII码
    %d, %i: 显示十进制整数
    %e, %E:展现科学计数法数值
    %f:展现为浮点数
    %g, %G:以科学计数法或浮点格局显得数值
    %s:展现字符串
    %u:无符号整数
    %%: 显示%自身 
    修饰符: #[.#]:
    先是个数字控制呈现的肥瘦;
    第二个#意味着小数点后精度,%3.一f
    -: 左对齐(暗许右对齐)
    %-一5s +:突显数值的正负符号 %+d

awk处理进程: 依次对每一行举行拍卖,然后输出

编纂命令

  • d: 删除格局空间万分的行
  • p: 呈现方式空间中的内容
  • a []text: 在钦命行前边增加文本帮助选取\n达成多行追加
  • i []text: 在行前边插入文本
  • c []text: 替换行为单行或多行文本
  • w /path/somefile: 保存情势匹配的行至钦命文件
  • r /path/somefile: 读取钦点文件的文本至方式空间中
  • 匹配到的行后 =: 为情势空间中的行打字与印刷行号
  • !: 方式空间中匹配行取反处理

+= i+=j i=i+j

*=
/=
%=
^=

示例:

(1)awk -F: ‘{print “%s” ,$一}’
/etc/passwd——printf命令自个儿不抱有换行命令,所以不加\n,就不会自动换行

澳门金沙国际 27

image.png

(2) awk -F : ‘{printf “%s\n”,$1}’ /etc/passwd

澳门金沙国际 28

image.png

(3)awk -F : ‘{printf “%s %d\n” ,$1,$3}’ /etc/passwd

澳门金沙国际 29

image.png

(4)awk -F: ‘{printf “%-30s %-30d\n” ,$1,$3}’ /etc/passwd

澳门金沙国际 30

image.png

(5)awk -F: ‘{printf “%-30s %-10.3f” ,$1,$3}’
/etc/passwd

澳门金沙国际 31

image.png

(6)awk -F: ‘{printf “username: %-20s uid: %-10d\n” ,$1,$3}’
/etc/passwd

澳门金沙国际 32

image.png

(7)awk -F: ‘BEGIN{print “username uid”}{printf “%-20s %-10d\n”
,$1,$3}’ /etc/passwd

澳门金沙国际 33

image.png

(8) awk -F: ‘BEGIN{printf “username uid\n———–\n”}{printf
“%-20s %-10d\n” ,$1,$3}’ /etc/passwd

澳门金沙国际 34

image.png

(9)df| grep “/dev/”|awk ‘{printf ” username: %-20s use: %-10s\n”
,$1,$5}’

澳门金沙国际 35

image.png

awk命令情势:

探寻替换

  • s///:查找替换,支持使用任何分隔符,s@@@,s### 
  • 轮换标记:
    • g: 行内全局替换
    • p: 呈现替换来功的行
    • w /PATH/TO/SOMEFILE:将替换到功的行保存至文件中

系统变量:

FS 输入定义字段分隔符,私下认可为2个空格田野先生 seprator
OFS 输出的字段分隔符,暗中同意为1个空格
awk ‘BEGIN{FS=”:”;OFS=”T”}{print $1,$2}’ a.txt
中华VS 输入记录分隔符,暗中认可为三个换行符
OTucsonS 输出的记录分隔符,暗许为多个换行符
awk ‘BEGIN{RS=”\t”;ORS=” “}{print $1,$2}’ a.txt
NR 行数
awk ‘{print NR}’ a.txt
FN福睿斯 行数,多文件操作时会重新排序
文本三杀手。awk ‘{print FNR}’ a.txt ming
NF 字段的个数,$NF代表最后三个字段
awk ‘BEGIN{FS=”:”}{print NF}’ a.txt
FILENAME 文件名
awk ‘{print FILENAME}’ a.txt

五.操作符

(1) 算术操作符:
x+y, x-y, x*y, x/y, x^y, x%y
例:
awk ‘BEGIN{print 2^3}’
awk ‘BEGIN{print 2+3}’
awk ‘BEGIN{print 2^3}’
-x: 转换为负数
+x: 转换为数值 
(贰)字符串操作符:未有标记的操作符,字符串连接 
赋值操作符: =, +=, -=, *=, /=, %=, ^= ++, -
awk ‘BEGIN{print i++}’
awk ‘BEGIN{print ++i}’

澳门金沙国际 36

image.png

awk -v n=100 ‘BEGIN{sum=100;print sum+=n;pirnt sum }’

澳门金沙国际 37

正如操作符: ==, !=, >, >=, <, <= 
格局匹配符:~:右边是或不是和左侧匹配包蕴
!~:是不是不般配
awk –F: ‘$0 ~ /root/{print $1}‘ /etc/passwd
awk -F : ‘$0 !~ /root/{print $1}’ /etc/passwd

澳门金沙国际 38

image.png

awk ‘$0~”^root” ‘ /etc/passwd——root 后不写{print} 私下认可打印$0
也得以写成 awk ‘$0~/^root/{print $0}’ /etc/passwd
awk –F: ‘$3==0’ /etc/passwd

澳门金沙国际 39

image.png

(3)逻辑操作符:
与&&,或||,非! 
示例:
awk -F: ‘ $三>=100&&$三<=一千 {print $0}’
/etc/passwd——$3是或不是高于100且小于一千,满意条件打字与印刷结果

澳门金沙国际 40

image.png

awk -F: ‘$3>=1000|| $3<=100{print $3}’ /etc/passwd

澳门金沙国际 41

image.png

awk -F: ‘!($3==0){print $3}’ /etc/passwd
(4)函数调用: function_name(argu1, argu2, …) 
标准表明式(叁目表明式):
selector?if-true-expression:if-false-expression
示例:
awlk -F: ‘{$3>=1000?usertype=”commonuser”:usertype=”sysuser or
sysadmin”;printf “%-30s %-10s\n” ,$1,usertype}’ /etc/passwd

澳门金沙国际 42

image.png

诠释:首先判断$三是或不是超出一千,假使过量1000则显示用户类型为’commonuser’,当小于一千时,则显得用户类型为’sysuser
or
sysadmin’,然后格式化打字与印刷用户名和用户类型。注意字符串一定要加双引号
(五) awk PATTERN
awk PATTE奇骏N:依照pattern条件,先过滤匹配的行,再做拍卖
(一)假设未钦点:航空模型式,匹配每一行

澳门金沙国际 43

image.png

(二) /regular expression/:仅处理能够情势匹配到的行,供给用/ /括起来
awk ‘/^UUID/{print $1}’ /etc/fstab
awk ‘!/^UUID/{print $1}’ /etc/fstab

澳门金沙国际 44

image.png

(三) relational expression: 关系表明式,结果为“真”才会被处理
真:结果为非0值,非空字符串
假:结果为空字符串或0值 
示例:
awk -F: ‘i=1;j=一{print i,j}’
/etc/passwd——判断’i=1,j=一’结果为非0,所以为真,给每1行都会打字与印刷’i=一,j=一’

澳门金沙国际 45

image.png

awk ‘!0’ /etc/passwd ——非0结果为真
awk ‘!一’ /etc/passwd ——结果为0,为假,不做继续处理
awk –F: ‘$3>=一千{print $一,$3}’ /etc/passwd
——判断$叁是或不是超出一千,假若过量1000则打字与印刷用户名和UID
awk -F: ‘$叁<1000{print $一,$3}’ /etc/passwd——原理同上
awk -F: ‘$NF==”/bin/bash”{print $一,$NF}’ /etc/passwd
——最终二个字段是或不是为/bin/bash,如若知足则打字与印刷用户名和最终三个字段
awk -F: ‘$NF ~ /bash$/{print $一,$NF}’
/etc/passwd——最后贰个字段是否是以/bash/结尾的,如若满足则打字与印刷
(4) line ranges:行范围
格式:startline,endline:/pat1/,/pat2/ 不辅助直接交给数字
例子:
awk -F: ‘/root>/,/halt>/{print $一}’ /etc/passwd
——判断以root早先,到以halt早先匹配的行

澳门金沙国际 46

image.png

awk -F: ‘(NR>=10&&NR<=20){print NR,$1}’ /etc/passwd 
(5) BEGIN/END模式
BEGIN{}: 仅在初始拍卖公事中的文本以前实施3回
END{}:仅在文本处理完毕现在执行叁次
示例:
awk -F: ‘BEGIN{printf “username uid\n”}'{printf “%-20s %-10d\n “}
END{printf “print end”}/etc/passwd

澳门金沙国际 47

image.png

澳门金沙国际 48

image.png

seq 十 | awk ‘i=0’——i=0为假,不实施操作
seq 10 |awk ‘i=1’——i=1为真,会打印

澳门金沙国际 49

image.png

seq 10 |awk ‘i=!0’——非0为真,执行后续操作
seq 10 |awk
‘i=!i’——i自个儿为0,因为从前未有赋值,可是加!表示非0,所以会打字与印刷一,当读入第贰个数字是,非i为假,不打字与印刷,所以最后的出口结果为奇数

澳门金沙国际 50

image.png

若是想打字与印刷偶数, seq 10 |awk -v i=一 ‘i=!i’

澳门金沙国际 51

image.png

或者seq 10 |awk ‘!(i=!i)’ 效果也是打字与印刷偶数
一经想驾驭输出的结果为真照旧为假,能够 seq 10 |awk ‘{i=!i;print i}’

澳门金沙国际 52

image.png

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

高等编辑命令

  • h: 把形式空间中的内容覆盖至保持空间中
  • H:把形式空间中的内容增添至保持空间中
  • g: 从维系空间取出数据覆盖至格局空间 
  • G:从维系空间取出内容充实至情势空间
  • x: 把格局空间中的内容与维持空间中的内容开始展览交流 
  • n: 读取下一行到情势空间,且前期的操作命令只对该行有效 
  • N: 读取下壹行到方式空间,且前期的操作命令对形式空间的富有行有效 
  • d: 删除情势空间中的行
  • D:删除当前情势空间开端至\n的内容(不再传至正式输
    出),吐弃未来的授命,但是对剩余情势空间重新履行sed

提到操作符和布尔操作符

6.awk控制语句

(1) if-else语句
语法:if(condition){statement;…}[else statement]
if(condition1){statement1}else if(condition2){statement2}
else{statement3} 
应用境况:对awk取得的整行或有个别字段做规范判断 
示例:
awk -F: ‘{if($3>=1000)print $1,$3}’ /etc/passwd

澳门金沙国际 53

image.png

awk -F : ‘{if($NF==”/bin/bash”)print $1,$3 }’
/etc/passwd——最后贰个字段是还是不是为/bin/bash,若是满意,则打字与印刷

澳门金沙国际 54

image.png

awk -F: ‘{if($3>=1000){printf username=”common user %-20s %-10d\n
” ,$1,$3}else{printf username=”sysuser or sysadmin %-20s %-10d\n”
,$1,$3}}’ /etc/passwd

澳门金沙国际 55

image.png

也可写成 awk -F: ‘{if ($三>=一千)printf usrename=”common user
%-20s\n” ,$1;else printf username=”sysuser or root %-20s\n” ,$1}’
/etc/passwd
df -h |awk -F: ‘/^/dev/{print $1}’|awk ‘$NF>10{print $NF}’

澳门金沙国际 56

image.png

awk ‘BEGIN{test=680;if(test>=680)print “you can go to qinghua”;else
if (test<680$$test>=600)print “you can go to fudan”;else
print”you can go home”}’

澳门金沙国际 57

image.png

(2)while循环 
语法:while(condition){statement;…} 
条件“真”,进入循环;条件“假”,退出循环 使用情况:
对一行内的多少个字段逐一类似处理时行使 对数组中的各因素逐1处理时采纳
示例:
awk ‘/^[[:space:]]/linux16/{i=1;while (i<=NF){print
$i,length($i);i++}}’ /etc/grub2.cfg
解说:首先分明是以空格初叶并后跟linux16的行,然后判断字段数是不是低于等于尾数字段数,假若满意条件,就打字与印刷字段内容和字段的尺寸。然后去匹配下一行,并且重新从i=1赋值,继续判断循环

澳门金沙国际 58

image.png

awk ‘/^[[:space:]]linux16/{i=1;while (i<=NF){if
length($i)>=10{print $i length($i)};i++ }}’ /etc/grub2.cfg

澳门金沙国际 59

image.png

练习:
打印1到10,呈现数字是奇数仍然偶数
seq 10|awk ‘{i=1;while(i<=NF){if ($i%2==0)print $i,”oushu”;else
print $i,”jishu”;i++}}’

澳门金沙国际 60

image.png

(3)do-while循环 
语法:do {statement;…}while(condition) 
意义:无论真假,至少实施3次循环体
示例:
计算1加到100
方法1:
awk ‘BEGIN{ total=0;i=0;do{ total+=i;i++;}while(i<=100);print
total}’
方法2:
echo {1..100}|tr ‘ ‘ ‘+’|bc
方法3:
seq -s ‘+’ 100|bc
方法4:
for ((sum=0;i=1;i<=100;i++));do let sum+=i;done echo $sum

澳门金沙国际 61

image.png

方法5:
awk ‘BEGIN{i=1;sum=0;while(i<=100){sum+=i;i++} print $sum}’
方法6:
awk ‘BEGIN{for(i=1;i<=100;i++){sum+=i}print sum}’

澳门金沙国际 62

image.png

(4)for循环 
语法:for(expr1;expr2;expr3) {statement;…} 
相近用法: for(variable assignment;condition;iteration process)
{for-body} 
特种用法:可以遍历数组中的元素
语法:for(var in array) {for-body} 
示例:
awk ‘/^[[:space:]]*linux/{for(i=壹;i<=NF;i++){print $i
length($i)}}’——寻找是不是以空格开首,并后跟linux1陆的行,打印每种字段的始末,并出示字段的长短
(5)switch语句 
语法:
switch(expression) {case VALUE1 or /REGEXP/:
statement1; case VALUE2 or /REGEXP2/: statement2; …; default:
statementn}
break和continue
awk ‘BEGIN{sum=0;for(i=1;i<=100;i++)
{if(i%2==0)continue;sum+=i}print sum}’
职能是打字与印刷奇数,并相加求和
要是想打字与印刷偶数
awk
‘BEGIN{sum=0;for(i=1;i<=100;i++){if(i%2==0)continue;sum+=i}print
sum}’

澳门金沙国际 63

image.png

如果将continue换成break,效果是

澳门金沙国际 64

image.png

原因:break
的意义是倘诺满意条件,则跳出整个循环,不再执行,所以率先个数为一,属于奇数,满足条件,直接退出,展现结果为0
而计量偶数时,因为1为奇数,不满足条件,继续计数,直到第四个数进来,满意条件,则脱离整个循环
勤学苦练:判断i是还是不是等于50,如若等于退出循环,不再总结
awk ‘BEGIN{sum=0;for(i=1;i<=100;i++) {if(i==50)break;sum+=i}print
sum}’

澳门金沙国际 65

image.png

next: 提前截至对行业处理而一向进入下壹行处理(awk自个儿循环)
练习:
(1)awk -F: ‘{if($3%2!=0) next; print $壹,$三}’
/etc/passwd——判断uid是还是不是为偶数,是偶数则打字与印刷

澳门金沙国际 66

image.png

(二)用next打字与印刷用户名打字与印刷偶数行(etc/passwd)
awk -F: ‘{if(NR%2!=0)next;print NR,$1,$3}’ /etc/passwd

澳门金沙国际 67

image.png

 [-F|-f|-v]   大参数,-F内定分隔符,-f调用脚本,-v定义变量 var=value

awk

AWK是由Aho, Weinberger,
Kernighan那三人共同开发出的壹妙不可言的文本处理工具,Linux及Unix环境中现有的效应最强大的数额处理引擎之一。

awk [options] ‘program’ var=value file…
awk [options] -f programfile var=value file…
awk [options] ‘BEGIN{ action;… } pattern{ action;… } END{ action;… }’
file …

  • options
    • -F 指明输入时用到的字段分隔符
    • -v var=value: 自定义变量
    • -f 钦定awk程序文件
  • BEGIN{ action;… }: 读入文本此前实施{action;…}
  • END{ action;… }: 文本处理完未来执行{ action;… }
  • pattern{ action;… }:
    pattern的再次来到值为True时,才实施{action;…},pattern能够有以下二种:

    • 倘诺未钦赐pattern: 匹配每壹行
    • /regular expression/:
      仅处理能够被情势(正则表达式匹配到的行,必要用/ /括起来
    • relational expression: 关系表达式,
      */pat1/,/pat2/: 行范围startline,endline不帮忙直接交给数字格式
    • True: 结果为非0值,非空字符串
    • False: 结果为空字符串或0值

涉及操作符:

< 小于Less than
> 大于Greater than
<= 小于等于Less than or equal to
>= 大于等于Greater than or equal to
== 等于Equal to
NF==伍NF(各个输入记录的字段数)的值和5相比较,要是结果为真,那么就举行相应的处理,不然不开始展览处理。
!= 不等于Not equal to
~ 匹配Matches
$5~/MA/ {print $1 “,”$6}
!~ 不匹配Does not match
留神:关系操作符==和赋值操作符=是例外的

六.awk数组

事关数组:
array[index-expression] 
index-expression:
(壹) 可利用任意字符串;字符串要利用双引号括起来
(2) 假诺某数组成分事先不存在,在引用时,awk会自动创立此因素,并将其值早先化为“空串”
若要判断数组中是还是不是存在某成分,要运用“index in array”格 式实行遍历
示例:
weekdays[“mon”]=”Monday“

awk ‘BEGIN{weekdays[“mon”]=”Monday”;
weekdays[“tue”]=”Tuesday”;print weekdays[“mon”],weekdays[tue]}’

澳门金沙国际 68

image.png

澳门金沙国际 69

image.png

练习:
总结/etc/passwd中最后三个字段shell类型,并对各种体系计数
awk -F: ‘{line[$7]++}END{for (i in line){print i,line[i] }}’
/etc/passwd

澳门金沙国际 70

image.png

若要遍历数组中的每种成分,要采纳for循环 
for(var in array) {for-body} 
注意:var会遍历array的每一个索引 

例子:
awk -F: ‘!line[$7]++’
/etc/passwd——作用是去重,’!’代表非的意趣,相同的shell类型只打印叁回。
规律:开始化为0,为假,不过经过”!”,变为真,打字与印刷三回对应的shell类型,不过之后相同都不打印,执行实现跳到下一行,继续执行新的shell类型的打印。

澳门金沙国际 71

image.png

awk ‘BEGIN{weekdays[“mon”]=”Monday”;weekdays[“tue”]
=”Tuesday”;for(i in weekdays) {print weekdays[i]}}’
***注意面试常考题:netstat -tan | awk ‘/^tcp/{state[$NF]++}END
{for(i in state) { print i,state[i]}}’
澳门金沙国际,awk ‘{line[$1]++}END{for(i in line) {print i,line[i]}}’
access_log

澳门金沙国际 72

image.png

取出国访问问的ip地址,并总括访问数量
netstat -tan|awk -F: ‘[[:space:]]+’ ‘/^tcp{ip[$6++]END{for(i in
ip){print i,ip[i]}}’

澳门金沙国际 73

image.png

固然想要排序,则在前边插手|sort -nr -k2|awk ‘{print $一}’|head -10

‘  ‘          引用代码块

awk工作流程

  • 首先步:执行BEGIN{action;… }语句块中的语句
  • 其次步:从文件或正式输入(stdin)读取1行,然后实施pattern{ action;…
    }语句块,它逐行扫描文件,从第二行到终极一行再一次这个进度,直到文件全体被读取实现。
  • 其三步:当读至输入流末尾时,执行END{action;…}语句块。
    .
  • BEGIN语句块在awk初步从输入流中读取行以前被执行,那是2个可选的语句块,比如变量开头化、打字与印刷输出表格的表头等话语平时能够写在BEGIN语句块中
  • END语句块在awk从输入流中读取完全数的行之后即被实施,比如打字与印刷全数行的解析结果这类消息汇总都以在END语句块中成就,它
    也是3个可选语句块
  • pattern语句块中的通用命令是最要害的有的,也是可选的。假使未有提供pattern语句块,则暗中同意执行{ print },即打字与印刷每三个读取
    到的行,awk读取的每一行都会履行该语句块

布尔操作符:

|| 逻辑或Logical OR
&& 逻辑与Logical AND
! 逻辑非Logical NOT
先举行关系操作符再履行布尔操作符

七.awk函数

数值处理: rand():重回0和一里头一个任意数
awk ‘BEGIN{print rand()}’——展现固定的值,并且为0和一时期的值
awk ‘BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }’ 

澳门金沙国际 74

image.png

字符串处理:
• length([s]):重回钦点字符串的长短
• sub(r,s,[t]):对t字符串进行搜索r表示的格局匹配的始末,并将第2个匹
配的内容替换为s
echo “2008:08:08 08:08:08″ | awk ‘sub(/:/,”-“,$1)’
• gsub(r,s,[t]):对t字符串进行搜索r表示的格局匹配的内容,并全体沟通为s所表示的情节
echo “2008:08:08 08:08:08” | awk ‘gsub(/:/,“-“,$0)’
• split(s,array,[r]):以r为分隔符,切割字符串s,并将切割后的结果保存
至array所代表的数组中,第贰个索引值为一,第二个索引值为二,…
netstat -tan | awk ‘/^tcp>/{split($5,ip,”:”);count[ip[1]]++}
END{for (i in count) {print i,count[i]}}’
练习:
总结男子的总分数和平均数,以及女人的总分数和平平均数量

澳门金沙国际 75

image.png

方法1:
awk ‘{total[$3]+=$2;num[$3]++}END{for(name in total){print
name,total[name],total[name]/num[name]}}’

澳门金沙国际 76

image.png

方法2:awk ‘{if($3 ==
“male”){msum+=$2;mnum++}else{fsum+=$2;fnum++}}END{printf “msum=%d
mavg=%.2f\n fsum=%d favg=%.2f\n”,msum,msum/mnum,fsum,fsum/fnum }’
score.txt

澳门金沙国际 77

image.png

(二)自定义函数 
格式: function name ( parameter, parameter, … ) {
statements return expression
}
示例:
cat a.txt
function max(v1,v2) {
v1>v2?var=v1:var=v2
return var
}
BEGIN{
print max(a,b)}
awk -v a=10 -v b=20 –f a.txt

澳门金沙国际 78

image.png

(3)system命令 
空格是awk中的字符串连接符,借使system中须要利用awk中
的变量能够运用空格分隔,只怕说除了awk的变量外其他一律 用””引用起来。
awk ‘BEGIN{system(“hostname”) }’

澳门金沙国际 79

image.png

awk ‘BEGIN{score=100; system(“echo your score is ” score) }’

澳门金沙国际 80

image.png

awk -v hi=”haha” ‘BEGIN{system(“echo ” hi)}’

澳门金沙国际 81

image.png

str=”hello,mage” ;awk -v hi=”$str” ‘BEGIN{system(“echo “hi)}’

澳门金沙国际 82

image.png

BEGIN  
起首化代码块,在对每一行开始展览处理以前,初始化代码,首若是引用全局变量,设置FS分隔符

awk内置命令

格式化打字与印刷:

printf ( format-expression [, arguments] )
c ASCII 字符
d 10进制整数
f 浮点格式
s 字符串
x 无符号十6进制

//           匹配代码块,能够是字符串或正则表明式

print

print item1, item2, …

特性

  • item之间用逗号分隔符
  • 输出的各item能够是字符串、数值、当前记下的字段、变量、awk表明式
  • 省略item,相当于print$0

常用举例:

语法 %-width.precision format-specifier
printf(” %d \t %s \n “, $5 , $8 )
printf(“|%10s|\n”, “hello”) 右对齐
printf(“|%-10s|\n”, “hello”) 左对齐
printf(“%*.*f\n”, 5, 3, myvar) 宽度5 精度3 打印myvar

{}           命令代码块,包括一条或多条命令

printf

printf “FORMAT”, item1, item2, …

特性

  • 务必钦命FO哈弗MAT
  • 不会自行换行,供给显式给出换行控制符,\n
  • FO卡宴MAT中需求各自为后边每种item钦点格式符 

FORMAT=格式符+修饰符

  • 格式符
    • %c: 显示字符的ASCII码 
    • %d, %i: 显示10进制整数 
    • %e, %E:展现科学计数法数值
    • %f: 彰显为浮点数
    • %g, %G:以科学计数法或浮点情势显得数值 
    • %s: 展现字符串
    • %u: 无符号整数
    • %%: 显示%自身
  • 修饰符:
    • #[.#]: 第二个数字控制呈现的上升幅度,第三个#意味着小数点后精度
    • -: 左对齐(暗许右对齐) %-一5s
    • +: 显示数值的正负符号 %+d

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@7-movekj ~]$ awk ‘BEGIN{print "Colum1,Colum2"}’
Colum1,Colum2
[root@7-movekj ~]$ awk ‘BEGIN{printf "%-10s,%8s\n","Colum1","Colum2"}’
Colum1    ,  Colum2
[root@7-movekj ~]$ awk ‘BEGIN{printf "%-10s,%-8s\n","Colum1","Colum2"}’
Colum1    ,Colum2  
[root@7-movekj ~]$ awk ‘BEGIN{printf "%.2f",2}’
2.00
[root@7-movekj ~]$ awk ‘BEGIN{printf "%10.2f",2}’
      2.00[root@7-movekj ~]$ awk ‘BEGIN{printf "%-10.2f",2}’
2.00      [root@7-movekj ~]$ awk ‘BEGIN{printf "%-10.2f",3}’
3.00      [root@7-movekj ~]$ awk ‘BEGIN{printf "%-10.2d",3}’
03        [root@7-movekj ~]$ awk ‘BEGIN{printf "%10.2d",3}’
        03[root@7-movekj ~]$ awk ‘BEGIN{printf "%10.3d",3}’
       003[root@7-movekj ~]$
 

 

向脚本传递参数

var=root
awk –F: -v a=$var ‘$1==a {print}’ /etc/passwd

求阶乘
5!=5*4*3*2*1

潜移默化控制流
break 退出循环
continue 终止当前的大循环,并从循环的顶部开头3个新的巡回
潜移默化主输入循环
next 读入下1行,并赶回脚本的顶部
exit 使主输入循环退出并将决定转移到END

 

 

ll |awk ‘BEGIN{printf(“%-5s\t%s\n”),”name”,”size”;FS=” “;}/^-/{printf
(“%-5s\t%s\n”,$NF,$5);i+=$5}END{printf(“%-5s\t%s\n”),”total”,i}’

ll |awk ‘BEGIN{printf(“%-5s\t%s\n”),”name”,”size”;print
“============”;FS=” “;}/^-/{printf
(“%-5s\t%s\n”,$NF,$5);i+=$5}END{print
“=============”;printf(“%-5s\t%s\n”),”total”,i}’

 

 

;          多条命令使用分号分隔

awk变量

awk NR NF

NR (number of row)表示行

NF (number of 田野) 表示列(私下认可值为结尾1列)

先来看2个实例:

获取剩余内部存款和储蓄器空间大小

[root@rhel6 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3828        791       3037          0        110        494
-/+ buffers/cache:        186       3642
Swap:         5999          0       5999
[root@rhel6 ~]# free -m | awk 'NR==3 {print $NF}'
3642

NF-伍 == -陆也正是倒数第陆列

[root@rhel6 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3828        791       3037          0        111        494
-/+ buffers/cache:        186       3642
Swap:         5999          0       5999
[root@rhel6 ~]# free -m | awk 'NR==2 {print $(NF-5)}'
3828

END    
 结尾代码块,在对每1行进行拍卖现在再实施的代码块,首借使实行末段总结或输出结尾摘要新闻

置于变量
  • FS: 输入字段分隔符,暗许为空白字符
  • OFS: 输出字段分隔符,默许为空白字符
  • 福睿斯S: 输入记录分隔符,钦点输入时的换行符,原换行符仍有效
  • OTiguanS: 输出记录分隔符,输出时用内定符号代替换行符
  • NF: 当前行的字段数量
  • N奥迪Q5: 当前行的行号
  • FNBMWX三: 各文件分别计数,行号
  • FILENAME: 当前文件名
  • A福特ExplorerGC: 命令行参数的个数
  • A凯雷德GV: 数组,保存的是命令行所给定的各参数 

awk -F

格式:-F'[:#/@¥$%]’   可以定义多少个分隔符,
补助正则表明式     -F ‘[      :]+’ 
使用空格和:分割,+表示能够有延续的空格或:

用法:awk -F”[@/t]” ‘{print $1,$2,$3}’
<test

    
以@,Tab键分割test文件的每一行,并出口第一、二、3列。

 

案例: 获取每一个分区的Use空间

[root@rhel6 script]# df -Ph
Filesystem                Size  Used Avail Use% Mounted on
/dev/mapper/VG01-lv_root  3.8G  510M  3.1G  14% /
tmpfs                     1.9G     0  1.9G   0% /dev/shm
/dev/sda1                 477M   88M  364M  20% /boot
/dev/mapper/VG01-lv_home  1.9G  3.7M  1.8G   1% /home
/dev/mapper/VG01-lv_opt   1.9G  139M  1.7G   8% /opt
/dev/mapper/VG01-lv_tmp   3.8G  7.9M  3.6G   1% /tmp
/dev/mapper/VG01-lv_usr   4.7G  2.0G  2.6G  44% /usr
/dev/mapper/VG01-lv_var   4.7G  509M  4.0G  12% /var
[root@rhel6 script]# df -h | awk 'NR==3 {print $(NF-1)}' | awk -F '[%]' '{print $1}'
14

过滤出mysql端口

[root@rhel6 script]# netstat -lntup | grep 3306 | awk -F "[ :]+" '{print $5}'
3306
[root@rhel6 script]# netstat -lntup | grep 3306 
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      16463/mysqld        

 

 

自定义变量(区分字符大小写)
  • -v var=value
  • 在program中一直定义

 

 

1
2
3
4
5
[root@7-movekj ~]$ awk -v test=’hello gawk’ ‘BEGIN{print test}’
hello gawk
[root@7-movekj ~]$ awk ‘BEGIN{test="hello,gawk";print test}’
hello,gawk
 

 

awk过滤

由此 /xxx|xxx|xxx/ 来拓展过滤

[root@rhel6 script]# df -hP | awk -F '%' '/usr|tmp|var/{print $1}'
tmpfs                     1.9G     0  1.9G   0
/dev/mapper/VG01-lv_tmp   3.8G   81M  3.6G   3
/dev/mapper/VG01-lv_usr   4.7G  2.0G  2.5G  44
/dev/mapper/VG01-lv_var   4.7G  573M  3.9G  13
[root@rhel6 script]# df -hP | awk -F '%' '/usr|tmp|var/{print $2}'
 /dev/shm
 /tmp
 /usr
 /var

 

特殊要点:

awk操作符

  • 算术操作符: x+y, x-y, x*y, x/y, x^y, x%y
  • -x: 转换为负数
  • +x: 转换为数值
  • 字符串操作符: 未有标记的操作符,字符串连接 
  • 赋值操作符: =, +=, -=, *=, /=, %=, ^=,++, —
  • 正如操作符: ==, !=, >, >=, <, <=
  • 格局匹配符: 帮忙正则表明式
    • ~: 左边是或不是和右手匹配包罗
    • !~: 是或不是不包容
  • 逻辑操作符:与&&,或||,非!
  • 规格表明式(3目表明式):
    selector?if-true-expression:if-false-expression

$0           表示全体当前行

awk action

  • Expressions: 算术、相比较表明式等 
  • Control statements: if、 while等 
  • Compound statements: 组合语句 
  • input statements: 没用过
  • output statements: print、printf等

$1           每行第二个字段

awk 控制语句

NF          字段数量变量

分支语句
  • if(condition){statement;…}[else statement]
  • if(condition1){statement1}else
    if(condition2){statement2}else{statement3}
  • switch(expression){case VALUE1 or /REGEXP/: statement1; case VALUE2
    or /REGEXP2/: statement2; …; default: statementN}

NQashqai          每行的记录号,多文本记录递增

循环语句
  • while(condition){statement;…}
  • do{statement;…}while(condition)
  • for(expr1;expr2;expr3) {statement;…}

FNPRADO        与N大切诺基类似,可是多文本记录不递增,每种文件都从壹始发

控制语句
  • next: 提前停止对行业处理而直白进入下一行处理
  • break [n] 
  • continue [n]

\t            制表符

awk 数组

\n           换行符

数组格式

array[index]

  • index
    • 可利用任意字符串;字符串要利用双引号括起来
    • 只要某数组元素事先不存在,在引用时,awk会自动创制此因素,并将其值初阶化为“空串”

FS          BEGIN时定义分隔符

数组遍历

for(idx in array){for-body}

RAV四S       输入的笔录分隔符,
暗许为换行符(即文本是按一行一行输入)

awk函数

~            匹配,与==相比较不是准确相比

停放函数
  • rand(): 再次来到0和一时期三个随意数,使用之前须求先调用srand()函数

 

 

1
2
awk ‘BEGIN{srand(); for (i=1;i<=10;i++)print int(rand()*100) }’
 

 

  • length([s]): 再次来到钦定字符串的长短

     

  • sub(r,s,[t]):
    对t字符串实行搜索r表示的方式匹配的始末,并将首先个地位卓殊的内容替换为s

 

 

1
2
echo "2008:08:08 08:08:08" | awk ‘sub(/:/,“-",$1)’
 

 

  • gsub(r,s,[t]):
    对t字符串实行搜索r表示的形式匹配的内容,并全体调换为s所代表的剧情

 

 

1
2
echo "2008:08:08 08:08:08" | awk ‘gsub(/:/,“-",$0)’
 

 

  • split(s,array,[r]):
    以r为分隔符,切割字符串s,并将切割后的结果保存至array所表示的数组中,第一个索引值为一,第三个索引值为二,…

 

 

1
2
netstat -tan | awk ‘/^tcp\>/{split($5,ip,":");count[ip[1]]++} END{for (i in count) {print i,count[i]}}
 

 

!~           不兼容,不标准相比

自定义函数

语法

 

 

1
2
3
4
5
function name ( parameter, parameter, … ) {
        statements
        return expression
}
 

 

示例

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@7-movekj awk]$ cat fun.awk
#!/bin/awk -f
function max(v1,v2) {
v1>v2?var=v1:var=v2
return var
}
BEGIN{
a=3
b=2
print max(a,b)
}
 
[root@7-movekj awk]$ awk –f fun.awk
 

 

==         等于,必须一切格外,精确相比

awk中调用shell命令

空格是awk中的字符串连接符,如若system中须要使用awk中
的变量能够运用空格分隔,或然说除了awk的变量外其他一律 用””引用起来。

示例:

 

 

1
2
3
4
5
[root@7-movekj awk]$ awk ‘BEGIN{system("hostname") }’
7-movekj.com
[root@7-movekj awk]$ awk ‘BEGIN{score=100; system("echo your score is " score) }’
your score is 100
 

 

!=           不对等,精确比较

awk 脚本

&&      逻辑与

普通awk脚本

示例

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@7-movekj awk]$ cat f1.awk
#!/bin/awk -f
 
{if($3>=1000)print $1,$3}
 
[root@7-movekj awk]$ ./f1.awk -F: /etc/passwd | head  -3
nfsnobody 65534
starli 1000
gentoo 1001
 
[root@7-movekj awk]$ cat f2.awk
{if($3>=1000)print $1,$3}
 
[root@7-movekj awk]$ awk -F: -f f2.awk /etc/passwd | head -3
nfsnobody 65534
starli 1000
gentoo 1001
 

 

||             逻辑或

带变量的awk脚本

那种方法传递给awk脚本的变量在BEGIN进度中不可用。直到首行输入完结以后,变量才可用。能够通过-v参数,让awk在推行BEGIN此前获得变量的值。命令行中每二个点名的变量都急需二个-v参数

 

 1 [root@7-movekj awk]$ cat f3.awk
 2 #!/bin/awk -f
 3 {if($3 >=min && $3<=max)print $1,$3}
 4 [root@7-movekj awk]$ chmod +x f3.awk
 5 [root@7-movekj awk]$ ./f3.awk -F: min=100 max=200 /etc/passwd
 6 systemd-network 192
 7 abrt 173
 8 usbmuxd 113
 9 rtkit 172
10 qemu 107
11 pulse 171

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
[root@7-movekj awk]$ cat f3.awk
#!/bin/awk -f
{if($3 >=min && $3<=max)print $1,$3}
[root@7-movekj awk]$ chmod +x f3.awk
[root@7-movekj awk]$ ./f3.awk -F: min=100 max=200 /etc/passwd
systemd-network 192
abrt 173
usbmuxd 113
rtkit 172
qemu 107
pulse 171
 

+            匹配时表示三个或一个以上

awk

awk是行处理器:
相比较显示屏处理的独到之处,在处理庞大文件时不会油但是生内部存款和储蓄器溢出可能处理缓慢的题材,平常用来格式化文本音讯

awk处理进度: 依次对每①行开始展览处理,然后输出

awk命令格局:

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file

 [-F|-f|-v]   大参数,-F钦定分隔符,-f调用脚本,-v定义变量 var=value

‘  ‘          引用代码块

BEGIN  
初叶化代码块,在对每一行开始展览处理以前,初叶化代码,首假如引用全局变量,设置FS分隔符

//           匹配代码块,能够是字符串或正则表明式

{}           命令代码块,包含一条或多条命令

;          多条命令使用分号分隔

END    
 结尾代码块,在对每一行进行拍卖现在再进行的代码块,首借使展开末段总结或输出结尾摘要音讯

 

特殊要点:

$0           表示全体当前行

$一           每行第多个字段

NF          字段数量变量

NBMWX5          每行的记录号,多文本记录递增

FNR        与NRubicon类似,然则多文件记录不递增,种种文件都从1早先

\t            制表符

\n           换行符

FS          BEGIN时定义分隔符

HavalS       输入的笔录分隔符,
暗许为换行符(即文本是按一行1行输入)

~            匹配,与==比较不是可相信比较

!~           不匹配,不确切比较

==         等于,必须全部至极,精确相比

!=           不等于,精确相比较

&&      逻辑与

||             逻辑或

+            匹配时表示三个或二个以上

/[0-9][0-9]+/   四个或多少个以上数字

/[0-9][0-9]*/    一个或三个之上数字

FILENAME 文件名

OFS       输出字段分隔符,
私下认可也是空格,能够改为制表符等

O奥德赛S        
输出的记录分隔符,暗中同意为换行符,即处理结果也是单排一行输出到荧屏

-F'[:#/]’   定义多少个分隔符

 

print & $0

print 是awk打字与印刷钦赐内容的严重性命令

awk ‘{print}’  /etc/passwd   ==   awk ‘{print $0}’  /etc/passwd  

awk ‘{print ”
“}’ /etc/passwd                                           //不出口passwd的情节,而是输出相同个数的空行,进一步分解了awk是单排一行处理公事

awk ‘{print “a”}’
  /etc/passwd                                        //输出相同个数的a行,一行唯有贰个a字母

awk -F”:” ‘{print $1}’  /etc/passwd 

awk -F: ‘{print $一; print $贰}’   /etc/passwd
                  //将每1行的前2个字段,分行输出,进一步精通1行1行处理文件

awk  -F: ‘{print $1,$3,$6}’ OFS=”\t” /etc/passwd     
  //输出字段一,三,6,以制表符作为分隔符

 

-f钦点脚本文件

awk -f script.awk  file

BEGIN{

FS=”:”

}

{print $1}               //效果与awk -F”:” ‘{print
$1}’相同,只是分隔符使用FS在代码本人中钦定

 

awk ‘BEGIN{X=0} /^$/{ X+=1 } END{print “I find”,X,”blank lines.”}’ test 

I find 4 blank lines.

 ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$伍} END{print “total size is”,sum}’
                   //总括文件大小

total size is 17487

 

-F钦命分隔符

$一 指内定分隔符后,第一个字段,$3第七个字段, \t是制表符

1个或多个一连的空格或制表符看做叁个定界符,即八个空格看做四个空格

awk -F”:” ‘{print $1}’  /etc/passwd

awk -F”:” ‘{print $壹 $3}’  /etc/passwd                    
  //$壹与$三相连输出,不分隔

awk -F”:” ‘{print $一,$三}’  /etc/passwd                      
//多了二个逗号,$1与$三使用空格分隔

awk -F”:” ‘{print $一 ” ” $三}’  /etc/passwd                
 //$1与$3之间手动添加空格分隔

awk -F”:” ‘{print “Username:” $1 “\t\t Uid:” $三 }’ /etc/passwd      
//自定义输出  

awk -F: ‘{print NF}’ /etc/passwd                               
//显示每行有多少字段

awk -F: ‘{print $NF}’ /etc/passwd                             
//将每行第NF个字段的值打字与印刷出来

 awk -F: ‘NF==四 {print }’ /etc/passwd                      
//显示唯有多少个字段的行

awk -F: ‘NF>二{print $0}’ /etc/passwd                    
  //展现每行字段数量超出贰的行

awk ‘{print NLX570,$0}’ /etc/passwd                               
 //输出每行的行号

awk -F: ‘{print NR,NF,$NF,”\t”,$0}’ /etc/passwd    
 //依次打字与印刷行号,字段数,最终字段值,制表符,每行内容

awk -F: ‘NR==5{print}’  /etc/passwd                         //显示第5行

awk -F: ‘NR==5 || NR==6{print}’  /etc/passwd       //显示第5行和第6行

route -n|awk ‘NR!=1{print}’                                      
//不展现第三行

 

//匹配代码块

//纯字符匹配   !//纯字符不匹配   ~//字段值匹配    !~//字段值不匹配  
~/a一|a2/字段值匹配a1或a二   

awk ‘/mysql/’ /etc/passwd

awk ‘/mysql/{print }’ /etc/passwd

awk ‘/mysql/{print $0}’ /etc/passwd                   //三条指令结果一致

awk ‘!/mysql/{print $0}’ /etc/passwd                 
//输出不匹配mysql的行

awk ‘/mysql|mail/{print}’ /etc/passwd

awk ‘!/mysql|mail/{print}’ /etc/passwd

awk -F: ‘/mail/,/mysql/{print}’ /etc/passwd         //区间匹配

awk ‘/[2][7][7]*/{print $0}’ /etc/passwd              
//匹配包括27为数字开端的行,如2七,277,277七…

awk -F: ‘$1~/mail/{print $一}’ /etc/passwd          
//$壹匹配钦命内容才显得

awk -F: ‘{if($1~/mail/) print $一}’ /etc/passwd     //与地方壹样

awk -F: ‘$1!~/mail/{print $1}’ /etc/passwd          //不匹配

awk -F: ‘$1!~/mail|mysql/{print $1}’ /etc/passwd        

 

IF语句

非得用在{}中,且相比内容用()扩起来

awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd                          
            //简写

awk -F: ‘{if($1~/mail/) {print $1}}’  /etc/passwd                      
            //全写

awk -F: ‘{if($1~/mail/) {print $1} else {print $2}}’ /etc/passwd        
   //if…else…

 

 

规则表明式

==   !=   >   >=  

awk -F”:” ‘$1==”mysql”{print $3}’ /etc/passwd  

awk -F”:” ‘{if($壹==”mysql”) print $三}’ /etc/passwd        
 //与地方相同 

awk -F”:” ‘$1!=”mysql”{print $3}’ /etc/passwd                 //不等于

awk -F”:” ‘$3>1000{print $3}’ /etc/passwd                      //大于

awk -F”:” ‘$三>=十0{print $3}’ /etc/passwd                  
  //大于等于

awk -F”:” ‘$3<1{print $3}’ /etc/passwd                        
   //小于

awk -F”:” ‘$三<=一{print $3}’ /etc/passwd                        
//小于等于

 

逻辑运算符

&& || 

awk -F: ‘$1~/mail/ && $3>8 {print }’ /etc/passwd        
//逻辑与,$1匹配mail,并且$3>8

awk -F: ‘{if($1~/mail/ && $3>8) print }’ /etc/passwd

awk -F: ‘$1~/mail/ || $3>1000 {print }’ /etc/passwd       //逻辑或

awk -F: ‘{if($1~/mail/ || $3>1000) print }’ /etc/passwd 

 

数值运算

awk -F: ‘$3 > 100’ /etc/passwd    

awk -F: ‘$3 > 100 || $3 < 5’ /etc/passwd  

awk -F: ‘$3+$4 > 200’ /etc/passwd

awk -F: ‘/mysql|mail/{print $三+10}’ /etc/passwd                  
 //第5个字段加十打印 

awk -F: ‘/mysql/{print $3-$4}’ /etc/passwd                            
//减法

awk -F: ‘/mysql/{print $3*$4}’ /etc/passwd                            
//求乘积

awk ‘/MemFree/{print $2/1024}’ /proc/meminfo                  //除法

awk ‘/MemFree/{print int($2/1024)}’ /proc/meminfo           //取整

 

输出分隔符OFS

awk ‘$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt

awk ‘$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt    
   

//输出字段六匹配WAIT的行,在那之中出口每行行号,字段四,5,陆,并利用制表符分割字段

 

输出处理结果到文件

一在命令代码块中向来出口    route -n|awk ‘N大切诺基!=1{print > “./fs”}’   

贰施用重定向进行输出           route -n|awk ‘N普拉多!=1{print}’  > ./fs

 

格式化输出

netstat -anp|awk ‘{printf “%-8s %-8s %-10s\n”,$1,$2,$3}’ 

printf表示格式输出

%格式化输出分隔符

-8长度为8个字符

s表示字符串类型

打字与印刷每行前八个字段,钦赐第3个字段输出字符串类型(长度为八),第四个字段输出字符串类型(长度为8),

其八个字段输出字符串类型(长度为10)

netstat -anp|awk ‘$6==”LISTEN” || NR==1 {printf “%-10s %-10s %-10s
\n”,$1,$2,$3}’

netstat -anp|awk ‘$6==”LISTEN” || NR==1 {printf “%-3s %-10s %-10s %-10s
\n”,NR,$1,$2,$3}’

 

IF语句

awk -F: ‘{if($3>100) print “large”; else print “small”}’ /etc/passwd

small

small

small

large

small

small

awk -F: ‘BEGIN{A=0;B=0} {if($3>100) {A++; print “large”} else {B++;
print “small”}} END{print A,”\t”,B}’ /etc/passwd 

                                                                                                                 
//ID大于100,A加1,否则B加1

awk -F: ‘{if($三<拾0) next; else print}’ /etc/passwd                  
      //小于100跳过,不然展现

awk -F: ‘BEGIN{i=1} {if(i<nf) print=”” nr,nf,i++=”” }’=”” etc=””
passwd=””   <=”” span=””>

awk -F: ‘BEGIN{i=1} {if(i<nf) {print=”” nr,nf}=”” i++=”” }’=”” etc=””
passwd<=”” span=””>

另壹种样式

awk -F: ‘{print ($3>100 ? “yes”:”no”)}’  /etc/passwd 

awk -F: ‘{print ($3>100 ? $3″:\tyes”:$3″:\tno”)}’  /etc/passwd

 

while语句

awk -F: ‘BEGIN{i=1} {while(i<nf) print=”” nf,$i,i++}’=”” etc=””
passwd =”” <=”” div=””>

7 root 1

7 x 2

7 0 3

7 0 4

7 root 5

7 /root 6

 

数组

netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print
i,”\t”,a[i]}’

netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) printf “%-20s %-10s
%-5s \n”, i,”\t”,a[i]}’

9523                               1     

9929                               1     

LISTEN                            6     

7903                               1     

3038/cupsd                   1     

7913                               1     

10837                             1     

9833                               1     

 

应用1

awk -F: ‘{print NF}’ helloworld.sh                                      
                //输出文件每行有微微字段

awk -F: ‘{print $1,$2,$3,$4,$5}’ helloworld.sh                          
      //输出前5个字段

awk -F: ‘{print $1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh                
//输出前五个字段并使用制表符分隔输出

awk -F: ‘{print NR,$1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh          
//制表符分隔输出前伍个字段,并打印行号

 

应用2

awk -F'[:#]’ ‘{print NF}’  helloworld.sh                            
                     //钦命八个分隔符: #,输出每行多少字段

awk -F'[:#]’ ‘{print $1,$2,$3,$4,$5,$6,$7}’ OFS=’\t’ helloworld.sh  
//制表符分隔输出多字段

 

应用3

awk -F'[:#/]’ ‘{print NF}’ helloworld.sh                            
                  //钦点多少个分隔符,并出口每行字段数

awk -F'[:#/]’ ‘{print $一,$二,$三,$4,$5,$6,$七,$8,$九,$10,$1一,$1贰}’
helloworld.sh     //制表符分隔输出多字段

 

应用4

计算/home目录下,普通文书的分寸,使用KB作为单位

ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size
is:”,sum/1024,”KB”}’

ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size
is:”,int(sum/拾二四),”KB”}’         //int是取整的意味

 

应用5

计算netstat -anp 状态为LISTEN和CONNECT的总是数量分别是稍稍

netstat -anp|awk ‘$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum)
printf “%-10s %-6s %-3s \n”, i,” “,sum[i]}’

 

应用6

总结/home目录下区别用户的常常文书的总额是多少?

ls -l|awk ‘NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf “%-6s
%-5s %-3s \n”,i,” “,sum[i]}’   

mysql        199 

root           374 

计算/home目录下区别用户的常备文书的大大小小总size是有点?

ls -l|awk ‘NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf “%-6s
%-5s %-3s %-2s \n”,i,” “,sum[i]/1024/1024,”MB”}’

 

应用7

出口成绩表

awk ‘BEGIN{math=0;eng=0;com=0;printf “Lineno.   Name    No.    Math  
English   Computer    Total\n”;printf
“————————————————————\n”}{math+=$3;
eng+=$4; com+=$5;printf “%-8s %-7s %-7s %-7s %-9s %-10s %-7s
\n”,NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf
“————————————————————\n”;printf
“%-24s %-7s %-9s %-20s \n”,”Total:”,math,eng,com;printf “%-24s %-7s
%-9s %-20s \n”,”Avg:”,math/NR,eng/NR,com/NR}’ test0

[root@localhost home]# cat test0 

Marry   2143 78 84 77

Jack    2321 66 78 45

Tom     2122 48 77 71

Mike    2537 87 97 95

Bob     2415 40 57 62

澳门金沙国际 83

 

awk手册

 

/[0-9][0-9]+/   五个或五个以上数字

/[0-9][0-9]*/    1个或三个上述数字

FILENAME 文件名

OFS       输出字段分隔符,
暗中同意也是空格,能够改为制表符等

OLANDS        
输出的记录分隔符,默许为换行符,即处理结果也是单排一行输出到显示屏

-F'[:#/]’   定义多个分隔符

 

print & $0

print 是awk打字与印刷指定内容的显要命令

awk ‘{print}’  /etc/passwd   ==   awk ‘{print $0}’  /etc/passwd  

awk ‘{print ”
“}’ /etc/passwd                                           //不出口passwd的剧情,而是输出相同个数的空行,进一步表达了awk是单排一行处理公事

awk ‘{print “a”}’
  /etc/passwd                                        //输出相同个数的a行,1行唯有七个a字母

awk -F”:” ‘{print $1}’  /etc/passwd 

awk -F: ‘{print $一; print $二}’   /etc/passwd
                  //将每1行的前一个字段,分行输出,进一步精通一行1行处理文件

awk  -F: ‘{print $1,$3,$6}’ OFS=”\t” /etc/passwd     
  //输出字段一,三,六,以制表符作为分隔符

 

-f钦点脚本文件

awk -f script.awk  file

BEGIN{

FS=”:”

}

{print $一}               //效果与awk -F”:” ‘{print
$1}’相同,只是分隔符使用FS在代码自个儿中钦定

 

awk ‘BEGIN{X=0} /^$/{ X+=1 } END{print “I find”,X,”blank lines.”}’ test 

I find 4 blank lines.

 ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size is”,sum}’
                   //总括文件大小

total size is 17487

 

-F内定分隔符

$1 指钦命分隔符后,第壹个字段,$三第④个字段, \t是制表符

二个或多个接二连三的空格或制表符看做贰个定界符,即多少个空格看做二个空格

awk -F”:” ‘{print $1}’  /etc/passwd

awk -F”:” ‘{print $壹 $三}’  /etc/passwd                    
  //$1与$三相连输出,不分隔

awk -F”:” ‘{print $壹,$3}’  /etc/passwd                      
//多了一个逗号,$一与$三使用空格分隔

awk -F”:” ‘{print $一 ” ” $3}’  /etc/passwd                
 //$一与$三之间手动添加空格分隔

awk -F”:” ‘{print “Username:” $1 “\t\t Uid:” $三 }’ /etc/passwd      
//自定义输出  

awk -F: ‘{print NF}’ /etc/passwd                               
//展现每行有微微字段

awk -F: ‘{print $NF}’ /etc/passwd                             
//将每行第NF个字段的值打字与印刷出来

 awk -F: ‘NF==四 {print }’ /etc/passwd                      
//彰显唯有三个字段的行

awk -F: ‘NF>2{print $0}’ /etc/passwd                    
  //展现每行字段数量超越2的行

awk ‘{print N景逸SUV,$0}’ /etc/passwd                               
 //输出每行的行号

awk -F: ‘{print NR,NF,$NF,”\t”,$0}’ /etc/passwd    
 //依次打字与印刷行号,字段数,最终字段值,制表符,每行内容

awk -F: ‘NR==5{print}’  /etc/passwd                         //显示第5行

awk -F: ‘NR==5 || NR==6{print}’  /etc/passwd       //显示第5行和第6行

route -n|awk ‘NR!=一{print}’                                      
//不呈现第3行

 

//匹配代码块

//纯字符匹配   !//纯字符不匹配   ~//字段值匹配    !~//字段值不匹配  
~/a一|a2/字段值匹配a壹或a二   

awk ‘/mysql/’ /etc/passwd

awk ‘/mysql/{print }’ /etc/passwd

awk ‘/mysql/{print $0}’ /etc/passwd                   //三条指令结果1律

awk ‘!/mysql/{print $0}’ /etc/passwd                 
//输出不匹配mysql的行

awk ‘/mysql|mail/{print}’ /etc/passwd

awk ‘!/mysql|mail/{print}’ /etc/passwd

awk -F: ‘/mail/,/mysql/{print}’ /etc/passwd         //区间匹配

awk ‘/[2][7][7]*/{print $0}’ /etc/passwd              
//匹配包括贰⑦为数字初始的行,如贰七,27七,277柒…

awk -F: ‘$1~/mail/{print $一}’ /etc/passwd          
//$一匹配钦赐内容才显得

awk -F: ‘{if($1~/mail/) print $一}’ /etc/passwd     //与地点一样

awk -F: ‘$1!~/mail/{print $1}’ /etc/passwd          //不匹配

awk -F: ‘$1!~/mail|mysql/{print $1}’ /etc/passwd        

 

IF语句

必须用在{}中,且比较内容用()扩起来

awk -F: ‘{if($1~/mail/) print $1}’ /etc/passwd                          
            //简写

awk -F: ‘{if($1~/mail/) {print $1}}’  /etc/passwd                      
            //全写

awk -F: ‘{if($1~/mail/) {print $1} else {print $2}}’ /etc/passwd        
   //if…else…

 

 

条件表达式

==   !=   >   >=  

awk -F”:” ‘$1==”mysql”{print $3}’ /etc/passwd  

awk -F”:” ‘{if($一==”mysql”) print $3}’ /etc/passwd        
 //与地方相同 

awk -F”:” ‘$1!=”mysql”{print $3}’ /etc/passwd                 //不等于

awk -F”:” ‘$3>1000{print $3}’ /etc/passwd                      //大于

awk -F”:” ‘$三>=拾0{print $叁}’ /etc/passwd                  
  //大于等于

awk -F”:” ‘$3<1{print $3}’ /etc/passwd                        
   //小于

awk -F”:” ‘$三<=壹{print $叁}’ /etc/passwd                        
//小于等于

 

逻辑运算符

&& || 

awk -F: ‘$1~/mail/ && $3>8 {print }’ /etc/passwd        
//逻辑与,$1匹配mail,并且$3>8

awk -F: ‘{if($1~/mail/ && $3>8) print }’ /etc/passwd

awk -F: ‘$1~/mail/ || $3>1000 {print }’ /etc/passwd       //逻辑或

awk -F: ‘{if($1~/mail/ || $3>1000) print }’ /etc/passwd 

 

数值运算

awk -F: ‘$3 > 100’ /etc/passwd    

awk -F: ‘$3 > 100 || $3 < 5’ /etc/passwd  

awk -F: ‘$3+$4 > 200’ /etc/passwd

awk -F: ‘/mysql|mail/{print $3+⑩}’ /etc/passwd                  
 //第多少个字段加十打印 

awk -F: ‘/mysql/{print $3-$4}’ /etc/passwd                            
//减法

awk -F: ‘/mysql/{print $3*$4}’ /etc/passwd                            
//求乘积

awk ‘/MemFree/{print $2/1024}’ /proc/meminfo                  //除法

awk ‘/MemFree/{print int($2/1024)}’ /proc/meminfo           //取整

 

输出分隔符OFS

awk ‘$6 ~ /FIN/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt

awk ‘$6 ~ /WAIT/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt    
   

//输出字段陆匹配WAIT的行,当中出口每行行号,字段肆,五,6,并运用制表符分割字段

 

输出处理结果到文件

1在命令代码块中一向出口    route -n|awk ‘NOdyssey!=1{print > “./fs”}’   

贰利用重定向实行输出           route -n|awk ‘N福睿斯!=1{print}’  > ./fs

 

格式化输出

netstat -anp|awk ‘{printf “%-8s %-8s %-10s\n”,$1,$2,$3}’ 

printf代表格式输出

%格式化输出分隔符

-8长度为8个字符

s表示字符串类型

打字与印刷每行前四个字段,钦命第陆个字段输出字符串类型(长度为八),第2个字段输出字符串类型(长度为8),

其四个字段输出字符串类型(长度为10)

netstat -anp|awk ‘$6==”LISTEN” || NR==1 {printf “%-10s %-10s %-10s
\n”,$1,$2,$3}’

netstat -anp|awk ‘$6==”LISTEN” || NR==1 {printf “%-3s %-10s %-10s %-10s
\n”,NR,$1,$2,$3}’

 

IF语句

awk -F: ‘{if($3>100) print “large”; else print “small”}’ /etc/passwd

small

small

small

large

small

small

awk -F: ‘BEGIN{A=0;B=0} {if($3>100) {A++; print “large”} else {B++;
print “small”}} END{print A,”\t”,B}’ /etc/passwd 

                                                                                                                 
//ID大于100,A加1,否则B加1

awk -F: ‘{if($三<十0) next; else print}’ /etc/passwd                  
      //小于100跳过,不然显示

awk -F: ‘BEGIN{i=1} {if(i<nf) print=”” nr,nf,i++=”” }’=”” etc=””
passwd=””   <=”” span=””>

awk -F: ‘BEGIN{i=1} {if(i<nf) {print=”” nr,nf}=”” i++=”” }’=”” etc=””
passwd<=”” span=””>

另壹种样式

awk -F: ‘{print ($3>100 ? “yes”:”no”)}’  /etc/passwd 

awk -F: ‘{print ($3>100 ? $3″:\tyes”:$3″:\tno”)}’  /etc/passwd

 

while语句

awk -F: ‘BEGIN{i=1} {while(i<nf) print=”” nf,$i,i++}’=”” etc=””
passwd =”” <=”” div=””>

7 root 1

7 x 2

7 0 3

7 0 4

7 root 5

7 /root 6

 

数组

netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) print
i,”\t”,a[i]}’

netstat -anp|awk ‘NR!=1{a[$6]++} END{for (i in a) printf “%-20s %-10s
%-5s \n”, i,”\t”,a[i]}’

9523                               1     

9929                               1     

LISTEN                            6     

7903                               1     

3038/cupsd                   1     

7913                               1     

10837                             1     

9833                               1     

 

应用1

awk -F: ‘{print NF}’ helloworld.sh                                      
                //输出文件每行有多少字段

awk -F: ‘{print $1,$2,$3,$4,$5}’ helloworld.sh                          
      //输出前5个字段

awk -F: ‘{print $1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh                
//输出前七个字段并利用制表符分隔输出

awk -F: ‘{print NR,$1,$2,$3,$4,$5}’ OFS=’\t’ helloworld.sh          
//制表符分隔输出前多少个字段,并打字与印刷行号

 

应用2

awk -F'[:#]’ ‘{print NF}’  helloworld.sh                            
                     //内定四个分隔符: #,输出每行多少字段

awk -F'[:#]’ ‘{print $1,$2,$3,$4,$5,$6,$7}’ OFS=’\t’ helloworld.sh  
//制表符分隔输出多字段

 

应用3

awk -F'[:#/]’ ‘{print NF}’ helloworld.sh                            
                  //内定五个分隔符,并出口每行字段数

awk -F'[:#/]’ ‘{print $壹,$二,$3,$肆,$5,$陆,$七,$8,$玖,$十,$1一,$1二}’
helloworld.sh     //制表符分隔输出多字段

 

应用4

测算/home目录下,普通文书的深浅,使用KB作为单位

ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size
is:”,sum/1024,”KB”}’

ls -l|awk ‘BEGIN{sum=0} !/^d/{sum+=$5} END{print “total size
is:”,int(sum/10二四),”KB”}’         //int是取整的情致

 

应用5

总结netstat -anp 状态为LISTEN和CONNECT的连天数量分别是有个别

netstat -anp|awk ‘$6~/LISTEN|CONNECTED/{sum[$6]++} END{for (i in sum)
printf “%-10s %-6s %-3s \n”, i,” “,sum[i]}’

 

应用6

计算/home目录下差别用户的家常文书的总数是稍微?

ls -l|awk ‘NR!=1 && !/^d/{sum[$3]++} END{for (i in sum) printf “%-6s
%-5s %-3s \n”,i,” “,sum[i]}’   

mysql        199 

root           374 

总结/home目录下不一致用户的常见文书的深浅总size是不怎么?

ls -l|awk ‘NR!=1 && !/^d/{sum[$3]+=$5} END{for (i in sum) printf “%-6s
%-5s %-3s %-2s \n”,i,” “,sum[i]/1024/1024,”MB”}’

 

应用7

输出成绩表

awk ‘BEGIN{math=0;eng=0;com=0;printf “Lineno.   Name    No.    Math  
English   Computer    Total\n”;printf
“————————————————————\n”}{math+=$3;
eng+=$4; com+=$5;printf “%-8s %-7s %-7s %-7s %-9s %-10s %-7s
\n”,NR,$1,$2,$3,$4,$5,$3+$4+$5} END{printf
“————————————————————\n”;printf
“%-24s %-7s %-9s %-20s \n”,”Total:”,math,eng,com;printf “%-24s %-7s
%-9s %-20s \n”,”Avg:”,math/NR,eng/NR,com/NR}’ test0

[root@localhost home]# cat test0 

Marry   2143 78 84 77

Jack    2321 66 78 45

Tom     2122 48 77 71

Mike    2537 87 97 95

Bob     2415 40 57 62

澳门金沙国际 84

 

awk手册

相关文章