文本3徘徊花

By admin in 美高梅手机版4858 on 2019年4月1日

*小心: awk的表明式供给使用单引号”

本章首要学习内容

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

 awk学习 

grep

文件搜索工具,依据用户钦定的“情势”对目的文本逐行举办匹配检查;打字与印刷匹配到的行

grep [OPTIONS] PATTERN [FILE…]

  • –color=auto: 对一双两好到的公文着色显示 
  • -v: 展现不被pattern匹配到的行
  • 文本3徘徊花。-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介绍

(1)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语句块,共三有个别构成 program平日是被单引号或双引号中
例: awk ‘{print 25}’ /etc/passwd

美高梅手机版4858 1

image.png

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

美高梅手机版4858 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执行时,由分隔符分隔的字段(域)标记$一,$二..$n称
为域标识。$0为全数域,注意:和shell中变量$符含义分裂
• 文件的每一行称为记录 • 省略action,则暗中认可执行 print $0 的操作

原文:

sed

sed是壹种流编辑器,它二回拍卖1行内容。处理时,把当下处理的行存款和储蓄在权且缓冲区中,称为“格局空间”(
pattern space),接着用sed命令处理缓冲区中的内容
,处理到位后,把缓冲区的内容送往显示器。接着处理下1行,那样持续重复,直到文件末尾。文件内容并从未改动
,除非您使用重定向存款和储蓄输出。Sed首要用于自动编辑一个或两个文本,简化对文件的频仍操作,编写转换程序等

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表示先加1再赋值
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;… }语句块中的语句 
  • 第3步:从文件或专业输入(stdin)读取1行,然后实施pattern{ action;…
    }语句块,它逐行扫描文件,从第二行到最后1行再度那个经过,直到文件全体被读取实现。
  • 其三步:当读至输入流末尾时,执行END{action;…}语句块 
  • BEGIN语句块在awk开首从输入流中读取行在此之前被实施,那是3个可选的语句块,比如变量开头化、打字与印刷输出表格的表头等说话平常能够写在BEGIN语句块中
  • END语句块在awk从输入流中读取完全体的行之后即被实施,比如
    打字与印刷全数行的解析结果那类消息汇总都以在END语句块中成就,它
    也是1个可选语句块 
  • pattern语句块中的通用命令是最重大的局地,也是可选的。如果未有提供pattern语句块,则暗中同意执行{ print },即打字与印刷每二个读取
    到的行,awk读取的每1行都会执行该语句块
  • print格式:print item1, item2, … 
    要点:
    (1) 逗号分隔符
    (二) 输出的各item能够字符串,也足以是数值;当前记下的字段、
    变量或awk的表明式
    (3) 如省略item,相当于print $0

示例:

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

美高梅手机版4858 3

image.png

(二) awk -F: ‘{print $一,$三}’ /etc/passwd——暗许以空格为分隔符

美高梅手机版4858 4

image.png

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

美高梅手机版4858 5

image.png

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

美高梅手机版4858 6

image.png

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

美高梅手机版4858 7

image.png

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

美高梅手机版4858 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

    美高梅手机版4858 9

    image.png

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

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

    美高梅手机版4858 10

    image.png

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

    例子:

    美高梅手机版4858 11

    image.png

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

    美高梅手机版4858 12

    image.png

    NF:字段数量

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

    美高梅手机版4858 13

    image.png

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

    美高梅手机版4858 14

    image.png

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

    美高梅手机版4858 15

    image.png

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

    美高梅手机版4858 16

    image.png

    FN中华V:各文件分别计数,行号
    ——效果就是如若同时读取八个公文时,能够分别举行计数打字与印刷行号,借使用N汉兰达则会将七个公文累加打字与印刷
    例:
    awk ‘{print NR}’ /etc/fstab /etc/inittab

    美高梅手机版4858 17

    image.png

    利用FN汉兰达则会解决该难题
    awk ‘{print FNR}’ /etc/fstab /etc/inittab

    美高梅手机版4858 18

    image.png

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

    美高梅手机版4858 19

    image.png

    A奥德赛GC:命令行参数的个数
    awk ‘{print ARGC}’ /etc/fstab /etc/inittab
    awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab

    美高梅手机版4858 20

    image.png

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

    美高梅手机版4858 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

    美高梅手机版4858 22

    image.png

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

    美高梅手机版4858 23

    image.png

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

    美高梅手机版4858 24

    image.png

    只顾:{print sex ,age ;age=18},打字与印刷出来的遵从是首先行不打印年龄

    美高梅手机版4858 25

    image.png

    也支撑调用文件来兑现
    vim aaa.txt
    {sex=”male”;age=18;print $1,male,age}

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

    美高梅手机版4858 26

    image.png

原理是先赋值后定义,不然会出现局部错误

awk是行处理器:
相相比荧屏处理的帮助和益处,在处理庞大文件时不会出现内存溢出也许处理缓慢的题材,平时用来格式化文本音信

地方定界
  • 不给地方:对全文实行处理 
  • 单地址:
    • #: 钦点的行
    • /pattern/:被那里格局所能够协作到的每一行 
  • 地方范围:
    • #,#: 
    • #,+# 
    • /pat1/,/pat2/ 
    • #,/pat1/
  • ~:步进
    • 1~二: 从壹开始,步进贰,表示奇数行
    • 2~二 从贰方始,步进二,表示偶数行

表达式:

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

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

四.awk中的printf命令

格式化输出:printf “FOSportageMAT”, item一, item2, …

  • (1) 必须钦赐FOCRUISERMAT
  • (二) 不会活动换行,供给显式给出换行控制符,\n
  • (三) FO福特ExplorerMAT中必要各自为前面每一种item钦定格式符 
    格式符:与item一一对应
    %c: 呈现字符的ASCII码
    %d, %i: 展现十进制整数
    %e, %E:展现科学计数法数值
    %f:展现为浮点数
    %g, %G:以科学计数法或浮点形式体现数值
    %s:展现字符串
    %u:无符号整数
    %%: 显示%自身 
    修饰符: #[.#]:
    首先个数字控制彰显的上涨幅度;
    第二个#代表小数点后精度,%三.1f
    -: 左对齐(暗中认可右对齐)
    %-一五s +:突显数值的正负符号 %+d

awk处理进度: 依次对每壹行实行拍卖,然后输出

编写制定命令

  • d: 删除情势空间非凡的行
  • p: 彰显情势空间中的内容
  • a []text: 在钦点行前面扩充文本支持接纳\n完结多行追加
  • i []text: 在行前边插入文本
  • c []text: 替换行为单行或多行文本
  • w /path/somefile: 保存形式匹配的行至内定文件
  • r /path/somefile: 读取钦命文件的文书至形式空间中
  • 同盟到的行后 =: 为情势空间中的行打字与印刷行号
  • !: 情势空间中匹配行取反处理

+= i+=j i=i+j

*=
/=
%=
^=

示例:

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

美高梅手机版4858 27

image.png

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

美高梅手机版4858 28

image.png

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

美高梅手机版4858 29

image.png

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

美高梅手机版4858 30

image.png

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

美高梅手机版4858 31

image.png

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

美高梅手机版4858 32

image.png

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

美高梅手机版4858 33

image.png

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

美高梅手机版4858 34

image.png

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

美高梅手机版4858 35

image.png

awk命令格局:

寻找替换

  • s///:查找替换,援救选择任何分隔符,s@@@,s### 
  • 轮换标记:
    • g: 行内全局替换
    • p: 突显替换来功的行
    • w /PATH/TO/SOMEFILE:将替换到功的行保存至文件中

系统变量:

FS 输入定义字段分隔符,暗许为两个空格田野同志 seprator
OFS 输出的字段分隔符,暗中同意为多个空格
awk ‘BEGIN{FS=”:”;OFS=”T”}{print $1,$2}’ a.txt
途达S 输入记录分隔符,私下认可为三个换行符
ORubiconS 输出的笔录分隔符,暗中同意为三个换行符
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表示最终2个字段
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}’

美高梅手机版4858 36

image.png

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

美高梅手机版4858 37

比较操作符: ==, !=, >, >=, <, <= 
方式匹配符:~:左侧是或不是和右手匹配包括
!~:是还是不是不般配
awk –F: ‘$0 ~ /root/{print $1}‘ /etc/passwd
awk -F : ‘$0 !~ /root/{print $1}’ /etc/passwd

美高梅手机版4858 38

image.png

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

美高梅手机版4858 39

image.png

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

美高梅手机版4858 40

image.png

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

美高梅手机版4858 41

image.png

awk -F: ‘!($3==0){print $3}’ /etc/passwd
(四)函数调用: 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

美高梅手机版4858 42

image.png

分解:首先判断$三是或不是超出一千,假诺超越1000则显得用户类型为’commonuser’,当小于一千时,则浮现用户类型为’sysuser
or
sysadmin’,然后格式化打字与印刷用户名和用户类型。注意字符串一定要加双引号
(五) awk PATTERN
awk PATTE奥迪Q5N:依据pattern条件,先过滤匹配的行,再做处理
(1)若是未内定:空形式,匹配每1行

美高梅手机版4858 43

image.png

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

美高梅手机版4858 44

image.png

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

美高梅手机版4858 45

image.png

awk ‘!0’ /etc/passwd ——非0结果为真
awk ‘!1’ /etc/passwd ——结果为0,为假,不做继续处理
awk –F: ‘$三>=一千{print $一,$三}’ /etc/passwd
——判断$三是或不是高于1000,如若超出一千则打字与印刷用户名和UID
awk -F: ‘$三<1000{print $1,$三}’ /etc/passwd——原理同上
awk -F: ‘$NF==”/bin/bash”{print $壹,$NF}’ /etc/passwd
——最终二个字段是或不是为/bin/bash,假设满意则打字与印刷用户名和最终1个字段
awk -F: ‘$NF ~ /bash$/{print $壹,$NF}’
/etc/passwd——最终1个字段是还是不是是以/bash/结尾的,假若餍足则打字与印刷
(4) line ranges:行范围
格式:startline,endline:/pat1/,/pat2/ 不支持直接付出数字
例子:
awk -F: ‘/root>/,/halt>/{print $1}’ /etc/passwd
——判断以root先河,到以halt开首匹配的行

美高梅手机版4858 46

image.png

awk -F: ‘(NR>=10&&NR<=20){print NR,$1}’ /etc/passwd 
(5) BEGIN/END模式
BEGIN{}: 仅在初步拍卖文件中的文本从前实施贰次
END{}:仅在文本处理达成未来执行一次
示例:
awk -F: ‘BEGIN{printf “username uid\n”}'{printf “%-20s %-10d\n “}
END{printf “print end”}/etc/passwd

美高梅手机版4858 47

image.png

美高梅手机版4858 48

image.png

seq 拾 | awk ‘i=0’——i=0为假,不履行操作
seq 10 |awk ‘i=1’——i=1为真,会打印

美高梅手机版4858 49

image.png

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

美高梅手机版4858 50

image.png

假诺想打字与印刷偶数, seq 十 |awk -v i=① ‘i=!i’

美高梅手机版4858 51

美高梅手机版4858 ,image.png

或者seq 10 |awk ‘!(i=!i)’ 效果也是打字与印刷偶数
壹旦想掌握输出的结果为真还是为假,能够 seq 十 |awk ‘{i=!i;print i}’

美高梅手机版4858 52

image.png

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

高档编辑命令

  • h: 把情势空间中的内容覆盖至保持空间中
  • H:把格局空间中的内容充实至保持空间中
  • g: 从有限支撑空间取出数据覆盖至方式空间 
  • G:从保证空间取出内容充实至方式空间
  • x: 把形式空间中的内容与保持空间中的内容开始展览交换 
  • n: 读取下一行到形式空间,且中期的操作命令只对该行有效 
  • N: 读取下一行到格局空间,且前期的操作命令对方式空间的兼具行有效 
  • d: 删除形式空间中的行
  • D:删除当前形式空间开首至\n的情节(不再传至标准输
    出),放弃以往的吩咐,可是对剩余形式空间重新履行sed

关联操作符和布尔操作符

六.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

美高梅手机版4858 53

image.png

awk -F : ‘{if($NF==”/bin/bash”)print $壹,$叁 }’
/etc/passwd——最终一个字段是还是不是为/bin/bash,假使满意,则打字与印刷

美高梅手机版4858 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

美高梅手机版4858 55

image.png

也可写成 awk -F: ‘{if ($三>=1000)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}’

美高梅手机版4858 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”}’

美高梅手机版4858 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赋值,继续判断循环

美高梅手机版4858 58

image.png

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

美高梅手机版4858 59

image.png

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

美高梅手机版4858 60

image.png

(3)do-while循环 
语法:do {statement;…}while(condition) 
意义:无论真假,至少实施一遍循环体
示例:
计算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

美高梅手机版4858 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}’

美高梅手机版4858 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}’

美高梅手机版4858 63

image.png

如果将continue换成break,效果是

美高梅手机版4858 64

image.png

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

美高梅手机版4858 65

image.png

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

美高梅手机版4858 66

image.png

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

美高梅手机版4858 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==5NF(各类输入记录的字段数)的值和伍相比较,借使结果为真,那么就实行相应的处理,不然不开始展览处理。
!= 不等于Not equal to
~ 匹配Matches
$5~/MA/ {print $1 “,”$6}
!~ 不匹配Does not match
注意:关系操作符==和赋值操作符=是例外的

六.awk数组

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

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

美高梅手机版4858 68

image.png

美高梅手机版4858 69

image.png

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

美高梅手机版4858 70

image.png

若要遍历数组中的每一个成分,要接纳for循环 
for(var in array) {for-body} 
瞩目:var会遍历array的各样索引 

例子:
awk -F: ‘!line[$7]++’
/etc/passwd——作用是去重,’!’代表非的情致,相同的shell类型只打字与印刷三次。
规律:开端化为0,为假,可是通过”!”,变为真,打字与印刷二遍对应的shell类型,但是之后相同都不打字与印刷,执行完结跳到下1行,继续执行新的shell类型的打字与印刷。

美高梅手机版4858 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

美高梅手机版4858 72

image.png

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

美高梅手机版4858 73

image.png

固然想要排序,则在后头参与|sort -nr -k二|awk ‘{print $壹}’|head -十

‘  ‘          引用代码块

awk工作流程

  • 第1步:执行BEGIN{action;… }语句块中的语句
  • 其次步:从文件或标准输入(stdin)读取壹行,然后实施pattern{ action;…
    }语句块,它逐行扫描文件,从第3行到最终壹行再次这几个进程,直到文件全体被读取实现。
  • 其三步:当读至输入流末尾时,执行END{action;…}语句块。
    .
  • BEGIN语句块在awk初始从输入流中读取行此前被执行,那是2个可选的语句块,比如变量初步化、打字与印刷输出表格的表头等话语经常可以写在BEGIN语句块中
  • END语句块在awk从输入流中读取完全体的行之后即被实践,比如打字与印刷全体行的分析结果那类新闻集中都以在END语句块中成就,它
    也是三个可选语句块
  • pattern语句块中的通用命令是最重点的片段,也是可选的。要是未有提供pattern语句块,则暗许执行{ print },即打印每1个读取
    到的行,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) }’ 

美高梅手机版4858 74

image.png

字符串处理:
• length([s]):重回钦命字符串的长度
• sub(r,s,[t]):对t字符串进行搜索r表示的方式匹配的剧情,并将率先个匹
配的剧情替换为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所表示的数组中,第3个索引值为壹,第一个索引值为二,…
netstat -tan | awk ‘/^tcp>/{split($5,ip,”:”);count[ip[1]]++}
END{for (i in count) {print i,count[i]}}’
练习:
总结哥们的总分数和平平均数量,以及女人的总分数和平均数

美高梅手机版4858 75

image.png

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

美高梅手机版4858 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

美高梅手机版4858 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

美高梅手机版4858 78

image.png

(3)system命令 
空格是awk中的字符串连接符,假若system中必要选择awk中
的变量能够接纳空格分隔,只怕说除了awk的变量外其余1律 用””引用起来。
awk ‘BEGIN{system(“hostname”) }’

美高梅手机版4858 79

image.png

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

美高梅手机版4858 80

image.png

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

美高梅手机版4858 81

image.png

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

美高梅手机版4858 82

image.png

BEGIN  
初阶化代码块,在对每一行开始展览处理此前,初步化代码,首借使引用全局变量,设置FS分隔符

awk内置命令

格式化打字与印刷:

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

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

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
  • FOLX570MAT中须求各自为前面每一种item钦定格式符 

FORMAT=格式符+修饰符

  • 格式符
    • %c: 呈现字符的ASCII码 
    • %d, %i: 显示10进制整数 
    • %e, %E:显示科学计数法数值
    • %f: 突显为浮点数
    • %g, %G:以科学计数法或浮点方式体现数值 
    • %s: 显示字符串
    • %u: 无符号整数
    • %%: 显示%自身
  • 修饰符:
    • #[.#]: 第三个数字控制展现的升幅,第3个#意味着小数点后精度
    • -: 左对齐(私下认可右对齐) %-15s
    • +: 展现数值的正负符号 %+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 读入下一行,并再次回到脚本的顶部
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 田野同志) 表示列(默许值为结尾一列)

先来看3个实例:

赢得剩余内部存款和储蓄器空间大小

[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    
 结尾代码块,在对每一行开始展览拍卖未来再进行的代码块,首假设展开末段总计或输出结尾摘要新闻

置于变量
  • FS: 输入字段分隔符,暗中认可为空白字符
  • OFS: 输出字段分隔符,默许为空白字符
  • 奥德赛S: 输入记录分隔符,内定输入时的换行符,原换行符仍有效
  • OPAJEROS: 输出记录分隔符,输出时用钦定符号代替换行符
  • NF: 当前行的字段数量
  • N帕杰罗: 当前行的行号
  • FNTiggo: 各文件分别计数,行号
  • FILENAME: 当前文件名
  • A奥德赛GC: 命令行参数的个数
  • AKugaGV: 数组,保存的是命令行所给定的各参数 

awk -F

格式:-F'[:#/@¥$%]’   能够定义多个分隔符,
协理正则表明式     -F ‘[      :]+’ 
使用空格和:分割,+表示能够有连日的空格或:

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

    
以@,Tab键分割test文件的每1行,并出口第二、二、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           表示1切当前行

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}

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

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

FNOdyssey        与N奥迪Q伍类似,但是多文本记录不递增,各样文件都从一上马

操纵语句
  • next: 提前结束对行业处理而直白进去下壹行处理
  • break [n] 
  • continue [n]

\t            制表符

awk 数组

\n           换行符

数组格式

array[index]

  • index
    • 可选拔任意字符串;字符串要动用双引号括起来
    • 如若某数组成分事先不设有,在引用时,awk会自动创设此因素,并将其值开端化为“空串”

FS          BEGIN时定义分隔符

数组遍历

for(idx in array){for-body}

PRADOS       输入的记录分隔符,
暗中认可为换行符(即文本是按1行1行输入)

awk函数

~            匹配,与==相比较不是纯正相比

嵌入函数
  • rand(): 再次回到0和一之间1个Infiniti制数,使用从前要求先调用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所代表的数组中,第2个索引值为1,第3个索引值为二,…

 

 

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在此以前得到变量的值。命令行中每1个钦定的变量都供给几个-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处理进度: 依次对每1行开展处理,然后输出

awk命令格局:

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

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

‘  ‘          引用代码块

BEGIN  
先导化代码块,在对每1行实行处理之前,初步化代码,主要是援引全局变量,设置FS分隔符

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

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

;          多条命令使用分号分隔

END    
 结尾代码块,在对每一行进行拍卖现在再实践的代码块,首倘若拓展最终总结或输出结尾摘要新闻

 

卓殊要点:

$0           表示整个当前行

$一           每行第贰个字段

NF          字段数量变量

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

FNLAND        与N宝马X5类似,然则多文本记录不递增,各类文件都从1起头

\t            制表符

\n           换行符

FS          BEGIN时定义分隔符

奥迪Q5S       输入的笔录分隔符,
暗中认可为换行符(即文本是按1行1行输入)

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

!~           不包容,不规范相比较

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

!=           不对等,精确相比较

&&      逻辑与

||             逻辑或

+            匹配时表示贰个或3个以上

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

/[0-9][0-9]*/    贰个或二个之上数字

FILENAME 文件名

OFS       输出字段分隔符,
默许也是空格,能够改为制表符等

O本田UR-VS        
输出的记录分隔符,暗中同意为换行符,即处理结果也是单排一行输出到荧屏

-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 $2}’   /etc/passwd
                  //将每壹行的前三个字段,分行输出,进一步掌握壹行一行处理公事

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

 

-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是制表符

二个或四个接二连三的空格或制表符看做2个定界符,即两个空格看做二个空格

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

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

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

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>贰{print $0}’ /etc/passwd                    
  //显示每行字段数量超过二的行

awk ‘{print NSportage,$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}’                                      
//不显示第2行

 

//匹配代码块

//纯字符匹配   !//纯字符不匹配   ~//字段值匹配    !~//字段值不匹配  
~/a1|a2/字段值匹配a1或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,27七,277七…

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

awk -F: ‘{if($1~/mail/) print $1}’ /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 $叁}’ /etc/passwd                  
  //大于等于

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

awk -F”:” ‘$3<=一{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 $叁+10}’ /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 ‘N陆风X8!=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表示字符串类型

打印每行前七个字段,钦定第三个字段输出字符串类型(长度为八),第三个字段输出字符串类型(长度为八),

其多个字段输出字符串类型(长度为十)

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($3<100) 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 $一,$二,$三,$四,$五,$6,$7,$八,$九,$拾,$11,$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+=$伍} END{print “total size
is:”,int(sum/102四),”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

美高梅手机版4858 83

 

awk手册

 

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

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

FILENAME 文件名

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

O昂CoraS        
输出的笔录分隔符,默许为换行符,即处理结果也是单排壹行输出到显示器

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

 

print & $0

print 是awk打印钦赐内容的要紧命令

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

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

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

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

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

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

 

-f钦点脚本文件

awk -f script.awk  file

BEGIN{

FS=”:”

}

{print $一}               //效果与awk -F”:” ‘{print
$一}’相同,只是分隔符使用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钦赐分隔符

$一 指内定分隔符后,第三个字段,$叁第7个字段, \t是制表符

二个或七个连续的空格或制表符看做一个定界符,即三个空格看做一个空格

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

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

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

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

awk -F”:” ‘{print “Username:” $1 “\t\t Uid:” $3 }’ /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 NTiggo,$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}’                                      
//不突显第一行

 

//匹配代码块

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

awk ‘/mysql/’ /etc/passwd

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

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

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              
//匹配包括二7为数字先河的行,如贰柒,277,2777…

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

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

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”:” ‘$三>=100{print $3}’ /etc/passwd                  
  //大于等于

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

awk -F”:” ‘$3<=1{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    
   

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

 

出口处理结果到文件

一在指令代码块中一向出口    route -n|awk ‘N奥迪Q三!=1{print > “./fs”}’   

2施用重定向举办输出           route -n|awk ‘NPRADO!=1{print}’  > ./fs

 

格式化输出

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

printf表示格式输出

%格式化输出分隔符

-8长度为8个字符

s表示字符串类型

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

其七个字段输出字符串类型(长度为十)

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                  
      //小于十0跳过,不然彰显

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=””>

另1种样式

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 $1,$贰,$三,$4,$5,$6,$七,$8,$玖,$十,$11,$12}’
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+=$五} 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

美高梅手机版4858 84

 

awk手册

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有