语句Linux常用命令之awk

awk命令  时间:2021-02-12  阅读:()

L i n ux常用命令之awklinux教程http://ww w.linuxprob e.c o m/

标题 awk命令的使用

作用 awk是非常好用的数据处理工具主要处理每一行的字段内的数据默认的字段的分割符为空格键或[tab]键

一、 awk脚本的基本结构awk 'BEGIN{print "start"} pattern {commands} END{print "ends"} 'file //一个awk脚本通常由 BEGIN语句块、能够使用模式匹配的通用语句块、 END语句块3部分组成这三部分是可选的任意一部分都可以不出现在脚本中

//通常是被单引号或双引号括住的

例如 awk 'BEGIN{i=0} {i++}END{print i} ' filenameawk "BEGIN{i=0} {i++}END{print i} " filename

二、 awk的执行过程awk 'BEGIN {commands} pattern{commands}END{commands} ' f ilename

[1]第一步执行BEGIN{commands}语句块中的语句

[2]第二步从文件或标准输入stdin读取一行然后执行pattern{commands}语句块它逐行扫描文件第一行到最后一行重复这个过程直到文件全部被读取完毕

[3]第三步 当读至输入流末尾时候执行END{commands}语句块

BEGIN语句块在awk开始从输入流中读取行之前被执行这是一个可选的语句块。 比如变量的初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。

END语句块在awk从输入流读取完所有的行之后执行 比如打印所有行的分析结果这类信息汇总都是在END语句块中完成。

三、 awk内置变量

[1] $n是当前行的按照指定域分隔符默认是空格或[T AB] ]键分割后的第n个字段 比如n为1表示第1个字段 n为2表示第2个字段

[2] $0则是记录了执行过程中当前行的文本内容

[3]NF每一行($0)拥有的字段总数

[4]NR 目前awk所处理的"第几行"数据

[5]FNR表示当前所处理的文本内的"第几行"数据

[6]FS 目前的域分割符号可以通过FS字段指定文本的域分割符

[7]OFS输出字段的分割符默认是一个空格

[8]ORS输出的记录分割符默认是一个换行

[9]ARG IN D命令行中处理的当前文件的位置从1开始

[10]AR G C命令行参数的数目

[11]AR GV命令行参数的数组

四、 awk实例

例1 pay.txt文件内容格式:姓名、第一个月工资、第二个月工资、第三个月工资将每一个人的三月工资总和计算出来

Name 1st 2nd 3th

VBird 2300 3400 2500

Bmtsai 2000 2000 2300

Bird2 4300 4200 4100

命令 awk 'NR==1{printf ("%10s%10s%10s%10s%10s\n", $1, $2, $3,$4, "Total") } NR>=2{total=$2+$3+$4; printf ("%10s%10s%10s%10s%10s\n",$1, $2, $3, $4,total) } ' pay.txt

输出

解释 NR表示当前处理的行数行号 如果满足NR==1即处理的是第一行的内容Name 1st 2nd 3th就执行后面的括弧中的打印printf命令如果满足NR>=2那么就会执行第一个括弧中的命令{total=$2+$3+$4; printf

("%10s%10s%10s%10s%10s\n", $1, $2, $3, $4,total) } 。所以 awk命令格式中的pattern决定了是否对当前输入的行执行其后面的commands。

例2将a.dat的第一列内容和第二列内容相加a. dat内容 b.dat内容

命令 awk

'BEGIN{i=0; j=0}FNR==NR{array[i++]=$1;next} {total=array[j ]+$1;printarray[j ] ,$1,total; j++} ' a.dat b.dat

或awk

'BEGIN{i=0; j=0}ARGIND==1{array[i++]=$1}ARGIND==2{total=array[j ]+$1;print array[j ] ,$1,total; j++} ' a.dat b.dat

输出结果

解释 NR和FNR是awk内置变量表示行号 NR表示处理的记录的行数 FNR表示当前处理的文件的行数 因为awk的参数可以同时跟多个文件名并且按照其出现的顺序逐个输入并处理而NR 表示截止当前处理的总的行数而FNR表示当前所处理的文

件的行数。能能够导致读入下一个输入行并返回到脚本的顶部这可以避免对当前输入行执行其他的操作过程。

例3去除重复记录--假设某文件test.da记录如下

命令 awk ' !a[$0]++{print $0} ' test.da

输出

解释 awk默认数组的初始值是0 当记录已经出现在的数组a中的时候那么!a[$0]为假所以就不会执行后面的print $0

linux教程http://www. linuxprobe. com/

HostKvm新上联通CUVIP线路VPS,八折优惠后1G内存套餐$5.2/月起

最近上洛杉矶机房联通CUVIP线路主机的商家越来越多了,HostKvm也发来了新节点上线的邮件,适用全场8折优惠码,基于KVM架构,优惠后最低月付5.2美元起。HostKvm是一家成立于2013年的国人主机商,提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,君选择国内直连或优化线路,延迟较低,适合建站或者远程办公等。以洛杉矶CUVIP线路主机为例,...

Gcore(gcorelabs)俄罗斯海参崴VPS简单测试

有一段时间没有分享Gcore(gcorelabs)的信息了,这是一家成立于2011年的国外主机商,总部位于卢森堡,主要提供VPS主机和独立服务器租用等,数据中心包括俄罗斯、美国、日本、韩国、新加坡、荷兰、中国(香港)等多个国家和地区的十几个机房,商家针对不同系列的产品分为不同管理系统,比如VPS(Hosting)、Cloud等都是独立的用户中心体系,部落分享的主要是商家的Hosting(Virtu...

数脉科技:阿里云香港CN2线路服务器;E3-1230v2/16G/240G SSD/10Mbps/3IP,月付374元

数脉科技怎么样?昨天看到数脉科技发布了7月优惠,如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的。数脉科技对香港自营机房的香港服务器进行超低价促销,可选择10M、30M的优质bgp网络。目前商家有优质BGP、CN2、阿里云线路,国内用户用来做站非常不错,目前E3/16GB阿里云CN2线路的套餐有一个立减400元的优惠,有需要的朋友可以看看。点击进入:数脉科技商家官方网站香港特价阿里云...

awk命令为你推荐
手机游戏排行榜20152017年的手游排行榜?手机游戏排行榜20152015有什么手机游戏好玩?伪装微信地理位置微信和微信伪装地理位置打不开怎么办?一点就一闪就完了bbsxp老大!!您好!我是初学者!请问我的bbsxp如何更改顶端左面的LOGO??简体翻译成繁体有什么将简体中文翻译成繁体中文的网站啊缓冲区溢出教程适合黑客初级学者使用的黑客工具有那些 、邮箱打不开怎么办126邮箱打不开怎么办渗透测试网站渗透测试怎么做?照片转手绘照片弄成手绘一样的那个软件到底叫什么,能不能告诉啊?手机区号有的手机号中间的号码是地区区号,那是什么卡
中国十大域名注册商 西安服务器租用 中文国际域名 电信服务器租赁 阿里云搜索 国内免备案主机 yardvps 秒解服务器 阿里云代金券 北京主机 元旦促销 蜗牛魔方 七夕促销 傲盾官网 外贸空间 英雄联盟台服官网 独立主机 网页加速 国外网页代理 杭州电信宽带 更多