Linux基础篇之文本,数据流管理命令

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

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:文本和数据管理工科具

sed

sed是1种流编辑器,它3次拍卖1行内容。管理时,把当下拍卖的行存款和储蓄在一时缓冲区中,称为“方式空间”(
pattern space),接着用sed命令管理缓冲区中的内容
,管理到位后,把缓冲区的开始和结果送往显示屏。接着管理下1行,那样不断重复,直到文件末尾。文件内容并不曾改换,除非你选择重定向存款和储蓄输出。Sed首要用于自动编辑2个或几个文件,简化对文件的再3操作,编写转变程序等

sed [option]… script inputfile…

  • -n: 不出口形式空间内容到显示器,即不活动打字与印刷
  • -e: 多点编辑
  • -f: /PATH/SCRIPT_FILE: 从钦命文件中读取编辑脚本 
  • -r: 协理使用扩大正则表达式
  • -i: 原处编辑
  • -i.bak: 原处编辑,编辑前复制源文件为源文件名称+.bak后缀

原文:



script=地址定界+编辑命令

awk擅长于对数码进行分析并生成报告,简单的说awk正是把公文逐行的读入,以空格为暗中同意分隔符将每行切条,切开的一些再拓展种种分析管理。

awk擅长于对数据开始展览解析并扭转报告,轻易的话awk就是把文件逐行的读入,以空格为默许分隔符将每行切成条,切开的1对再张开各类分析管理。

地方定界
  • 不给地点:对全文进行管理 
  • 单地址:
    • #: 钦命的行
    • /pattern/:被这里情势所能够兼容到的每壹行 
  • 地点范围:
    • #,#: 
    • #,+# 
    • /pat1/,/pat2/ 
    • #,/pat1/
  • ~:步进
    • 1~2: 从一始发,步进二,表示奇数行
    • 2~二 从二发端,步进二,表示偶数行

awk是行管理器:
绝相比荧屏管理的独到之处,在管理庞大文件时不会并发内部存款和储蓄器溢出恐怕管理缓慢的难题,平常用来格式化文本新闻

使用格局:awk ‘{pattern + action}’ {filenames} 

利用形式:awk ‘{pattern + action}’ {filenames} 

编写命令

  • d: 删除情势空间十分的行
  • p: 展现格局空间中的内容
  • a []text: 在钦定行后边扩展文本帮助使用\n落成多行追加
  • i []text: 在行前边插入文本
  • c []text: 替换行为单行或多行文本
  • w /path/somefile: 保存情势相称的行至内定文件
  • r /path/somefile: 读取钦赐文件的文件至方式空间中
  • 合营到的行后 =: 为情势空间中的行打字与印刷行号
  • !: 方式空间中相配行取反管理

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

里头pattern 表示awk
在数量中找寻的开始和结果,而action是在找到相称内容时所进行的一名目繁多命令。花括号({})无需在先后中始终出现,但它们用于依据特定的方式对1多种指令展开分组。pattern正是要代表的正则说明式,用斜杠括起来。计划实例操作文件:netstat 
-t >> netstat.txt

中间pattern 表示awk
在多少中搜求的开始和结果,而action是在找到相称内容时所实行的1多种命令。花括号({})无需在程序中一直出现,但它们用于依据特定的格局对1层层指令展开分组。pattern正是要表示的正则表明式,用斜杠括起来。准备实例操作文件:netstat 
-t >> netstat.txt

探求替换

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

awk命令情势:



高端编辑命令

  • h: 把方式空间中的内容覆盖至保持空间中
  • H:把方式空间中的内容充实至保持空间中
  • g: 从保持空间抽取数据覆盖至形式空间 
  • G:从保持空间抽出内容扩张至情势空间
  • x: 把情势空间中的内容与保持空间中的内容开展调换 
  • n: 读取下1行到形式空间,且前期的操作命令只对该行有效 
  • N: 读取下一行到方式空间,且前期的操作命令对形式空间的富有行有效 
  • d: 删除方式空间中的行
  • D:删除当前格局空间早先至\n的内容(不再传至正式输
    出),放任现在的命令,可是对余下形式空间重新实践sed

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

一.壹 打字与印刷输出:print,格式化打字与印刷输出:printf

1.一 打印输出:print,格式化打字与印刷输出:printf

awk

AWK是由Aho, Weinberger,
Kernighan那四人共同开荒出的壹不错的文本处理工科具,Linux及Unix蒙受中存活的效益最壮大的多寡管理引擎之1。

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: 相称每1行
    • /regular expression/:
      仅管理能够被方式(正则表明式相称到的行,须要用/ /括起来
    • relational expression: 关系表明式,
      */pat1/,/pat2/: 行范围startline,endline不支持直接提交数字格式
    • True: 结果为非0值,非空字符串
    • False: 结果为空字符串或0值

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



awk职业流程

  • 第3步:实行BEGIN{action;… }语句块中的语句
  • 第贰步:从文件或标准输入(stdin)读取壹行,然后实践pattern{ action;…
    }语句块,它逐行扫描文件,从第三行到结尾一行再度那一个经过,直到文件全部被读取达成。
  • 其三步:当读至输入流末尾时,实行END{action;…}语句块。
    .
  • BEGIN语句块在awk开首从输入流中读取行以前被试行,那是八个可选的语句块,比方变量开始化、打字与印刷输出表格的表头等语句平时能够写在BEGIN语句块中
  • END语句块在awk从输入流中读取完全体的行之后即被实行,举例打字与印刷全体行的辨析结果那类音讯汇总都以在END语句块中落成,它
    也是三个可选语句块
  • pattern语句块中的通用命令是最重大的局地,也是可选的。假如未有提供pattern语句块,则默许施行{ print },即打字与印刷每三个读取
    到的行,awk读取的每一行都会实践该语句块

‘  ‘          引用代码块

awk ‘{print$1, $4}’ netstat.txt
awk ‘{printf “%-8s %-8s %-8s %-18s %-22s %-15s\n”,$1,$2,$3,$4,$5,$6}’
netstat.txt

awk ‘{print$1, $4}’ netstat.txt
awk ‘{printf “%-8s %-8s %-8s %-18s %-22s %-15s\n”,$1,$2,$3,$4,$5,$6}’
netstat.txt

awk内置命令

BEGIN  
早先化代码块,在对每壹行开始展览拍卖在此之前,发轫化代码,首即使引用全局变量,设置FS分隔符

1.二 过滤记录:awk ‘$三==0 && $六==”LISTEN”‘ netstat.txt

1.二 过滤记录:awk ‘$三==0 && $6==”LISTEN”‘ netstat.txt

print

print item1, item2, …

特性

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

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



printf

printf “FORMAT”, item1, item2, …

特性

  • 务必钦赐FOOdysseyMAT
  • 不会自动换行,须求显式给出换行调节符,\n
  • FOSportageMAT中供给各自为前边每一个item钦赐格式符 

FORMAT=格式符+修饰符

  • 格式符
    • %c: 显示字符的ASCII码 
    • %d, %i: 展现10进制整数 
    • %e, %E:展现科学计数法数值
    • %f: 展现为浮点数
    • %g, %G:以科学计数法或浮点格局显得数值 
    • %s: 突显字符串
    • %u: 无符号整数
    • %%: 显示%自身
  • 修饰符:
    • #[.#]: 第二个数字调控展现的拉长率,第二个#代表小数点后精度
    • -: 左对齐(私下认可右对齐) %-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 ~]$
 

 

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

当中的“==”为相比运算符。别的相比运算符:!=,>, <, >=, <=
awk ‘$3>0 {print $0}’ netstat.txt
投入表头:内建变量N昂Cora
awk ‘$3==0 && $6==”LISTEN” || NR==1 ‘ netstat.txt
再加上格式化输出                   

个中的“==”为比较运算符。别的相比运算符:!=,>, <, >=, <=
awk ‘$3>0 {print $0}’ netstat.txt
到场表头:内建变量NENCORE
awk ‘$3==0 && $6==”LISTEN” || NR==1 ‘ netstat.txt
再拉长格式化输出                   

awk变量

;          多条命令使用分号分隔

awk ‘$3 ==0 && $6==”LISTEN” || NR==1 {printf “%-20s %-20s
%s\n”,$4,$5,$6}’ netstat.txt
ps:awk的内建变量
$0
 当前记录(那一个变量中存放着方方面面行的从头到尾的经过)
 
$1~$n
 当前记下的第n个字段,字段间由FS分隔
 
FS
 输入字段分隔符暗许是空格或Tab
 
NF
 当前记录中的字段个数,正是有多少列
 
NR
 

awk ‘$3 ==0 && $6==”LISTEN” || NR==1 {printf “%-20s %-20s
%s\n”,$4,$5,$6}’ netstat.txt
ps:awk的内建变量
$0
 当前记下(那几个变量中存放着全套行的内容)
 
$1~$n
 当前记录的第n个字段,字段间由FS分隔
 
FS
 输入字段分隔符默许是空格或Tab
 
NF
 当前记下中的字段个数,便是有稍许列
 
NR
 

放置变量
  • FS: 输入字段分隔符,默认为空白字符
  • OFS: 输出字段分隔符,默以为空白字符
  • KugaS: 输入记录分隔符,钦定输入时的换行符,原换行符仍有效
  • O牧马人S: 输出记录分隔符,输出时用钦命符号代替换行符
  • NF: 当前行的字段数量
  • NHaval: 当前行的行号
  • FN福睿斯: 各文件分别计数,行号
  • FILENAME: 当前文件名
  • A牧马人GC: 命令行参数的个数
  • A福睿斯GV: 数组,保存的是命令行所给定的各参数 

END    
 结尾代码块,在对每一行开始展览管理未来再奉行的代码块,首倘若开展末段计算或输出结尾摘要消息

1度读出的记录数,便是行号,从一初步,要是有多个文件话,那么些值也是持续抬高级中学。
 
FNR
 当前记录数,与N奥迪Q5分化的是,这一个值会是各样文件自个儿的行号
 
RS
 输入的记录分隔符,默许为换行符
 
OFS
 输出字段分隔符,暗中认可也是空格
 
ORS
 输出的记录分隔符,默以为换行符
 
FILENAME
 当前输入文件的名字
 
出口行号:awk ‘$3 ==0 && $六==”ESTABLISHED”|| NRubicon==1 {printf “%0贰s %s
%-20s %-20s %s\n”,NR, FNR,$4,$5,$6}’ netstat.txt

现已读出的记录数,正是行号,从1起先,即便有多个文件话,这么些值也是延绵不断增加中。
 
FNR
 当前记录数,与NEvoque差异的是,那一个值会是各类文件自身的行号
 
RS
 输入的笔录分隔符,默以为换行符
 
OFS
 输出字段分隔符,默许也是空格
 
ORS
 输出的记录分隔符,默以为换行符
 
FILENAME
 当前输入文件的名字
 
出口行号:awk ‘$三 ==0 && $6==”ESTABLISHED”|| NOdyssey==一 {printf “%0二s %s
%-20s %-20s %s\n”,NR, FNR,$4,$5,$6}’ netstat.txt

自定义变量(区分字符大小写)
  • -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 ‘BEGIN{FS=”:”} {print $1,$三,$陆}’ /etc/passwd
或者awk -F: ‘{print $1,$3,$6}’ /etc/passwd
以\t作为分隔符输出:awk -F: ‘{print $一,$三,$陆}’ OFS=”\t” /etc/passwd

点名分隔符:awk ‘BEGIN{FS=”:”} {print $1,$三,$陆}’ /etc/passwd
或者awk -F: ‘{print $1,$3,$6}’ /etc/passwd
以\t作为分隔符输出:awk -F: ‘{print $1,$三,$陆}’ OFS=”\t” /etc/passwd

awk操作符

  • 算术操作符: x+y, x-y, x*y, x/y, x^y, x%y
  • -x: 调换为负数
  • +x: 调换为数值
  • 字符串操作符: 没有标识的操作符,字符串连接 
  • 赋值操作符: =, +=, -=, *=, /=, %=, ^=,++, —
  • 相比操作符: ==, !=, >, >=, <, <=
  • 方式相配符: 支持正则表明式
    • ~: 右边是不是和左边相称包括
    • !~: 是不是不合作
  • 逻辑操作符:与&&,或||,非!
  • 规格表明式(3目表明式):
    selector?if-true-expression:if-false-expression

独特要点:

1.3 字符串相配:~表示格外方式起头,正则表明式匹配。

1.3 字符串相称:~表示非常形式伊始,正则表明式相配。

awk action

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

$0           表示1切当前行



awk 调整语句

$1           每行第叁个字段

awk ‘$6 ~ /TIME/ || NR ==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt
awk ‘$6 ~ /ESTABLISHED/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t”
netstat.txt
awk ‘/LISTEN/’ netstat.txt
使用“/TIME|ESTABLISHED/” 来匹配TIME 或者ESTABLISHED :
awk ‘$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t”
netstat.txt
形式取反:!~
awk ‘$6 !~ /TIME/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt
或者awk ‘!/WAIT/’ netstat.txt

awk ‘$6 ~ /TIME/ || NR ==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt
awk ‘$6 ~ /ESTABLISHED/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t”
netstat.txt
awk ‘/LISTEN/’ netstat.txt
使用“/TIME|ESTABLISHED/” 来匹配TIME 或者ESTABLISHED :
awk ‘$6 ~ /FIN|TIME/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t”
netstat.txt
方式取反:!~
awk ‘$6 !~ /TIME/ || NR==1 {print NR,$4,$5,$6}’ OFS=”\t” netstat.txt
或者awk ‘!/WAIT/’ netstat.txt

分支语句
  • 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}

NF          字段数量变量

1.四 拆分文件:使用数据流重定向”>”

一.四 拆分文件:使用数据流重定向”>”

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

NGL450          每行的记录号,多文件记录递增



支配语句
  • next: 提前甘休对行当管理而平昔进去下1行管理
  • break [Linux基础篇之文本,数据流管理命令。n] 
  • continue [n]

FN中华V        与N哈弗类似,可是多文件记录不递增,每一个文件都从一最先

awk ‘NR!=1 {print > $6}’ netstat.txt      NR!=一代表不处理表头
把钦命的列输出到文件:  awk ‘N汉兰达!=1{print $4,$5 > $6}’ netstat.txt
利用程序流实行标准拆分:if else
awk ‘NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > “1.txt”;
else if($6 ~ /LISTEN/) print > “2.txt”;
else print > “3.txt”}’ netstat.txt

awk ‘NR!=1 {print > $6}’ netstat.txt      NR!=一代表不处理表头
把钦定的列输出到文件:  awk ‘N大切诺基!=1{print $4,$5 > $6}’ netstat.txt
应用程序流实行标准化拆分:if else
awk ‘NR!=1{if($6 ~ /TIME|ESTABLISHED/) print > “1.txt”;
else if($6 ~ /LISTEN/) print > “2.txt”;
else print > “3.txt”}’ netstat.txt

awk 数组

\t            制表符

1.5 统计

1.5 统计

数组格式

array[index]

  • index
    • 可选择任意字符串;字符串要使用双引号括起来
    • 借使某数组成分事先不设有,在引用时,awk会自动成立此因素,并将其值初阶化为“空串”

\n           换行符



数组遍历

for(idx in array){for-body}

FS          BEGIN时定义分隔符

计算有所的C文件,CPP文件和H文件的文件大小总和:
ls -l *.cpp *.c*.h | awk ‘{sum+=$5} END {print sum}’
总括各样connection状态的用法:使用数组
awk ‘NR!=1{a[$6]++;} END {for (i in a) print i “, ” a[i];}’
netstat.txt
总结每一种用户的进度的占了多少内部存储器:
ps aux| awk ‘NR!=1{a[$1]+=$6;} END { for(i ina) print i “, ”
a[i]”KB”;}’

总结有所的C文件,CPP文件和H文件的文件大小总和:
ls -l *.cpp *.c*.h | awk ‘{sum+=$5} END {print sum}’
总结各样connection状态的用法:使用数组
awk ‘NR!=1{a[$6]++;} END {for (i in a) print i “, ” a[i];}’
netstat.txt
总括每种用户的长河的占了稍稍内部存款和储蓄器:
ps aux| awk ‘NR!=1{a[$1]+=$6;} END { for(i ina) print i “, ”
a[i]”KB”;}’

awk函数

普拉多S       输入的笔录分隔符,
默以为换行符(即文本是按一行1行输入)

数组:因为awk中数组的下标能够是数字和字母,数组的下标常常被称之为关键字(key)。值和严重性字都存款和储蓄在里边的一张针对key/value应用hash的表格里。由于hash不是顺序存款和储蓄,因而在突显数组内容时会开采,它们并不是服从你预料的逐条展现出来的。数组和变量同样,都以在使用时自动成立的,awk也1致会活动判别其积存的是数字只怕字符串。一般来讲,awk中的数组用来从记录中搜罗音讯,能够用来计算总和、总计单词以及追踪模板被相配的次数等等。

数组:因为awk中数组的下标能够是数字和字母,数组的下标经常被喻为关键字(key)。值和关键字都存款和储蓄在里头的一张针对key/value应用hash的表格里。由于hash不是顺序存款和储蓄,因而在显示数组内容时会开采,它们并不是安分守纪你预料的顺序显示出来的。数组和变量同样,都是在采用时自动创造的,awk也一样会自行决断其积攒的是数字如故字符串。一般来讲,awk中的数组用来从记录中收载消息,能够用来总结总和、计算单词以及追踪模板被相称的次数等等。

停放函数
  • rand(): 再次回到0和一以内三个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所表示的数组中,第3个索引值为一,第一个索引值为二,…

 

 

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

 

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

壹.陆 使用脚本举办文本、数据管理

1.陆 使用脚本举行理文件本、数据管理

自定义函数

语法

 

 

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
 

 

==         等于,必须全部对等,准确比较

BEGIN、END关键字:BEGIN表示管理全数行此前的标识,END表示管理完全体行后的标记,具体语法:
BEGIN{ 这里面放的是实行前的讲话}
END {这里面放的是拍卖完全体的行后要施行的口舌}
{这里面放的是拍卖每1行时要进行的说话}
实例操作文件:cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
  math= 0
  english= 0
  computer= 0

BEGIN、END关键字:BEGIN表示管理全部行从前的标志,END表示管理完全体行后的标识,具体语法:
BEGIN{ 这里面放的是施行前的语句}
END {这里面放的是拍卖完全数的行后要实行的言辞}
{这里面放的是拍卖每一行时要执行的话语}
实例操作文件:cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
  math= 0
  english= 0
  computer= 0

awk 脚本

!=           不对等,精确比较

  printf”NAME    NO.    MATH  ENGLISH  COMPUTER  TOTAL\n”
  printf”———————————————\n”
}
#运行中
{
  math+=$3
  english+=$4
  computer+=$5
  printf “%-6s %-6s %4d %8d %8d %8d\n”, $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END{
  printf”———————————————\n”
  printf “TOTAL:%10d %8d %8d \n”, math, english, computer
  printf “AVERAGE:%10.2f %8.2f %8.2f\n”, math/NR,
english/NR,computer/NR
}
执行:awk -f cal.awk score.txt

  printf”NAME    NO.    MATH  ENGLISH  COMPUTER  TOTAL\n”
  printf”———————————————\n”
}
#运行中
{
  math+=$3
  english+=$4
  computer+=$5
  printf “%-6s %-6s %4d %8d %8d %8d\n”, $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END{
  printf”———————————————\n”
  printf “TOTAL:%10d %8d %8d \n”, math, english, computer
  printf “AVERAGE:%10.2f %8.2f %8.2f\n”, math/NR,
english/NR,computer/NR
}
执行:awk -f cal.awk score.txt

普通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
 

 

&&      逻辑与

1.柒变量注脚和情形变量:使用-v参数实行变量评释,ENVIRON关键字表示遭逢变量

壹.柒变量注脚和意况变量:使用-v参数举办变量评释,ENVIRON关键字表示蒙受变量

带变量的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           表示整个当前行

$一           每行第3个字段

NF          字段数量变量

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

FN劲客        与N本田UR-V类似,可是多文件记录不递增,各类文件都从一开头

\t            制表符

\n           换行符

FS          BEGIN时定义分隔符

凯雷德S       输入的记录分隔符,
默以为换行符(即文本是按壹行1行输入)

~            相称,与==相比较不是纯正相比

!~           不包容,不正确相比较

==         等于,必须一切等于,正确相比较

!=           不对等,精确相比

&&      逻辑与

||             逻辑或

+            相称时表示三个或三个以上

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

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

FILENAME 文件名

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

O本田CR-VS        
输出的记录分隔符,默以为换行符,即管理结果也是单排壹行输出到显示屏

-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 $2}’   /etc/passwd
                  //将每一行的前三个字段,分行输出,进一步理解壹行壹行管理文件

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

 

-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钦赐分隔符

$一 指钦赐分隔符后,第一个字段,$三第七个字段, \美高梅手机版4858,t是制表符

一个或多少个三番五次的空格或制表符看做1个定界符,即多少个空格看做四个空格

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

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

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

awk -F”:” ‘{print $一 ” ” $三}’  /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 N福睿斯,$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/字段值相配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              
//相称包括贰7为数字初始的行,如2七,27七,2777…

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

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”:” ‘$叁>=100{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 $三+拾}’ /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的行,在那之中出口每行行号,字段四,伍,陆,并行使制表符分割字段

 

出口处理结果到文件

一在指令代码块中一向出口    route -n|awk ‘N奥迪Q5!=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表示字符串类型

打字与印刷每行前四个字段,钦点第叁个字段输出字符串类型(长度为8),第一个字段输出字符串类型(长度为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($3<十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=””>

另一种格局

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                
//输出前5个字段并运用制表符分隔输出

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,$七,$8,$玖,$拾,$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/10二4),”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 1

 

awk手册

 

+            相称时表示3个或三个以上

$ x=5
$ y=10
$ export y                          #y被export为遭受变量

$ x=5
$ y=10
$ export y                          #y被export为意况变量

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

$ echo $x $y
5    10
$awk -v val=$x ‘{print $1, $2, $3, $4+val, $5+ENVIRON[“y”]}’ OFS=”\t”
score.txt

$ echo $x $y
5    10
$awk -v val=$x ‘{print $1, $2, $3, $4+val, $5+ENVIRON[“y”]}’ OFS=”\t”
score.txt

/[0-9][0-9]*/    多少个或3个之上数字

  • 1
  • 2
  • 3
  • 4
  • 下一页

美高梅手机版4858 2

FILENAME 文件名

awk:文本和数目管理工具

awk擅长于对数码实行剖析并扭转报告,一言以蔽之…

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行,一行唯有3个a字母

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

awk -F: ‘{print $一; print $二}’   /etc/passwd
                  //将每1行的前1个字段,分行输出,进一步掌握一行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
$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钦赐分隔符

$一 指钦赐分隔符后,第多个字段,$三第玖个字段, \t是制表符

贰个或多少个三番五次的空格或制表符看做二个定界符,即三个空格看做3个空格

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

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

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

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

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                    
  //显示每行字段数量超过二的行

awk ‘{print NXC60,$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}’                                      
//不突显第一行

 

//匹配代码块

//纯字符相称   !//纯字符不相配   ~//字段值匹配    !~//字段值不相配  
~/a一|a2/字段值相称a壹或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              
//相配包罗二7为数字发轫的行,如贰七,27七,277柒…

awk -F: ‘$1~/mail/{print $1}’ /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 $三+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的行,个中出口每行行号,字段四,伍,陆,并行使制表符分割字段

 

出口管理结果到文件

壹在指令代码块中一贯出口    route -n|awk ‘N瑞鹰!=1{print > “./fs”}’   

二使用重定向举办输出           route -n|awk ‘NLacrosse!=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($叁<100) 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=””>

另壹种格局

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,$六,$七,$八,$九,$拾,$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+=$伍} 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

美高梅手机版4858 3

 

awk手册

发表评论

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

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