awk 也是一个强大的编辑工具,它比 sed 的功能更加强大,可以在无交互的情况下实现
相当复杂的文本操作。

1.awk 的语法

awk [选项] ' print $1' 文件名

选项

-F指定分隔符

[root@localhost ~]# awk -F: '{print $3}' /etc/passwd

0
1
2
3
4
5

2、awk 的内置变量
          ·FS:指定每行文本的字段分隔符,缺省为空格或制表位
          ·NF:当前处理的行的字段个数(列数)
          ·NR:当前处理的行的序数(行数)
          ·$0:当前处理的行的整行内容
         ·$n:当前处理的第 n 个字段(第 n 列)

print:打印
 3、awk 的使用
在使用的过程中,可以使用逻辑操作符&&,表示“与”,||表示“或”,!表示“非”;还可
以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余、乘方

4、awk会根据空格和制表符,将每一行分成若干字段,依次用$1、$2、$3代表第一个字段、第二个字段、第三个字段等等。

********

awk最重要的是找到相同分割点然后隔断取值

补充:

sort(排序)

sort -nr (数值从大到小排序反向)

uniq-c(显示每个数重复的次数)

BEGIN(文件处理前)

END(文件处理后)

示例:

awk 'BEGIN{print "date\t age-n"\*******}{print $2\t$5}END{print hahaha} ip.txt

BEGIN中FS表示分隔符

BEGIN(文件处理前)

{文件处理中}

END{文件处理后}

basename:显示基本目录

dirname:显示主目录

示例:

[root@~~~]#cd /etc/systemctl/network-scripts

[root@~~~]#basename $NF

net ***********s

[root@~~~]#dirname $NF

etc*********ctl

=======================================================================

实例:

要求:把.txt后缀的文件改成.mp4格式

[root@localhost ~]#mkdir /b

[root@localhost ~]#cd /b

[root@localhost b]#touch {1..10}.txt

[root@localhost b]# ls
10.txt 1.txt 2.txt 3.txt 4.txt 5.txt 6.txt 7.txt 8.txt 9.txt

[root@localhost b]# ls | awk -F. '{print "mv "$1".txt "$1".mp4"}' | bash           //-F是分隔符、此处-F.是以.为分隔符
[root@localhost b]# ls
10.mp4 1.mp4  3.mp4  4.mp4   5.mp4   6.mp4    7.mp4     8.mp4    9.mp4

=======================================================================

求最大值(MAX)、最小值(MIN)、平均值、总和(SUM)

sum

[root@localhost ~]# df
文件系统                                1K-块             已用               可用               已用%          挂载点
/dev/mapper/centos-root     49250820    4410180         44840640           9%                   /
devtmpfs                             480836               0              480836                0%                  /dev
tmpfs                                   497948               0              497948                0%                  /dev/shm
tmpfs                                   497948           9836           488112                 2%                   /run
tmpfs                                   497948              0              497948                0%                    /sys/fs/cgroup
/dev/sda1                           1038336        169568        868768               17%                   /boot
tmpfs                                  99592             64               99528                1%                      /run/user/1000
tmpfs                                  99592            68                99524               1%                     /run/user/0
tmpfs                                  99592           4                   99588                 1%                  /run/user/42

要求1:求 1K-块的容量之和

[root@~~~]#df | awk -nr 'NR>=2 {print $2}'                          //NR表示行、NR>=2表示行数、print $2表示打印第二行

49250820
480836
497948
497948
497948
1038336
99592
99592
99592

[root@localhost ~]# df | awk -nr 'NR>=2 {sum+=$2}END{print sum}'             //sum+=$2表示sum=sum+$2、END表示结束后,print sum表示打印sum
52562612

要求2:求可用和已用之和

[root@localhost ~]# df | awk -nr 'NR>=2 {sum1+=$3;sum2+=$4}END{print sum1+sum2}'

52562612

test.txt文件内容:
9
11
35
21
42
118

求最大值:

awk 'BEGIN {max = 0} {if ($1+0 > max+0) max=$1} END {print "Max=", max}' test.txt
Max= 118

求最小值:

awk 'BEGIN {min = 65536} {if ($1+0 < min+0) min=$1} END {print "Min=", min}' test.txt
Min= 9

求和:

cat test.txt|awk '{sum+=$1} END {print "Sum= ", sum}'
Sum=  236

求平均值:

cat test.txt|awk '{sum+=$1} END {print "Avg= ", sum/NR}'
Avg=  39.3333

=======================================================================

[root@localhost ~]# cat awk.txt
abcgsg
banner
age
food
feet
more

010-123456
0791-1235677
ip 192.168.200.1
ip 192.168.200.111
ip 192.168.200.11
aBggfH
Bggsgs
gaglag1

打印全文

[root@localhost ~]# awk '{print}' awk.txt             print表示打印
abcgsg
banner
age
food
feet
more010-123456
0791-1235677
ip 192.168.200.1
ip 192.168.200.111
ip 192.168.200.11
aBggfH
Bggsgs
gaglag1

输出1到3行的内容

[root@localhost ~]# awk '(NR>=1)&&(NR<=3){print}' awk.txt           NR表示行
abcgsg
banner
age

输出1行和三行

[root@localhost ~]# awk 'NR==1||NR==3{print}' awk.txt
  abcgsg
  age

 

输出所有基数行

[root@localhost ~]# awk '(NR%2)==1{print}' awk.txt             %表示模
abcgsg
age
feet0791-1235677
ip 192.168.200.111
aBggfH
gaglag1
输出所有偶数行[root@localhost ~]# awk '(NR%2)==0{print}' awk.txt
banner
food
more
010-123456
ip 192.168.200.1
ip 192.168.200.11
Bggsgs

输出首字母是大写的

[root@localhost ~]# awk '/^[A-Z]/{print}' awk.txt
Bggsgs

Mem:剩余多大内存

[root@localhost ~]# freetotal        used        free      shared  buff/cache   available
Mem:         995896      590816       63260        8248      341820      195436
Swap:       2097148       27648     2069500
[root@localhost ~]# free | awk '/Mem:/{print int($3/$2*100)"%"}'    $3表示第三列,$2表示第二列
59%

过滤出free总容量

[root@localhost ~]# free | grep 'Mem:' | awk '{print $2}'
 995896

过滤IP地址

[root@localhost ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.200.115  netmask 255.255.255.0  broadcast 192.168.200.255inet6 fe80::656c:1296:c062:6af7  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:c3:ed:86  txqueuelen 1000  (Ethernet)RX packets 4184  bytes 1545149 (1.4 MiB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 2329  bytes 257278 (251.2 KiB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0[root@localhost ~]# ifconfig ens33 | awk -F '[ :]+' 'NR==2 {print $3}'
192.168.200.115

1、提取出/etc/passwd 文件当中,UID小于1000的用户名信息和UID信息[root@server0 ~]# awk -F : ' $3<1000  {print $1,$3}' /etc/passwd2、提取出/etc/passwd文件当中,shell环境为”/bin/bash”的用户信息有shell信息[root@server0 ~]# awk -F : ' $NF== "/bin/bash"  {print $1,$NF}' /etc/passwd3、提取出/etc/passwd文件当中,第一行到第5行的用户名相关信息[root@server0 ~]# awk -F : ' (NR>=1&&NR<=5) {print $1}' /etc/passwd4、打印/et/passwd奇数行[root@server0 ~]# awk -F : '{if (NR%2!=0) print $0}' /etc/passwd5、 打印UID不等于GID的用户名[root@server0 ~]# awk -F : '{if ($3!=$4) print $1}' /etc/passwd
6.awk提取登录用户ip地址[root@fengxiaoli41 ~]# who |tail -1|awk -F"[ ()]+" '{print$5}'192.168.10.1

过滤/etc/passwd中的用户名

[root@localhost ~]# awk -F ':' '{ print $1 }' /etc/passwd

root
bin
daemon
adm
lp
sync

....

......

取出/etc/passwd中每行的最后一个值

[root@localhost ~]# awk -F '' '$0=$NF' /etc/passwd          

取出用户的登录类型

[root@localhost ~]# awk -F ':' '{ print $NF}' /etc/passwd          ':'表示以:为分割  $NF表示最后一列/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin

取出每行的家目录的第一个字母

[root@localhost ~]# sed -nr '1,5 s#(.*):/(.)(.*/){2,}.*#\2#gp' /etc/passwd
r
b
s
v
v

转载于:https://www.cnblogs.com/cxm123123form/p/11456989.html

awk及sum求和!相关推荐

  1. Linq中的group by多表多字段,Sum求和

    Linq中的group by多表多字段,Sum求和 //Line to Sql 写法var data = (from a in Itemsgroup a by new { a.GroupId, a.I ...

  2. sql sum求和 值小于不显示_mysql中sum求和等类似方法关于null值的处理

    这类问题不容易发现,只有在发现数据异常时才会注意到. 以下SQL: select contract.id,contract.group_id,contract.id_ext,contract.cust ...

  3. 解决mysql sum求和返回null问题或IFNULL应用

    问题描述:sum求和要求返回float(或 integer或double等)类型,但当数据库不存在任何符合求和记录时,sum返回null,报类型绑定错误异常(mybatis: org.apache.i ...

  4. es数据类型 long造成的sum求和为0的问题

    es的数据类型long型,假设数据字段为double型的数据存储到es为long型,在es进行sum求和会变为0 1.入定义数据为为double,对应的es的数据类型为long型 2.添加数据 3.e ...

  5. foreach求和的效率和连接mysql的sum求和的效率

    范例: /** * 更新项目进度1 使用foreach循环求和 */ public function save_pro_finish_proportion1($pid){ $list = $this- ...

  6. EXCEL中基本函数应用-sum求和

    EXCEL中基本函数应用-sum求和 Excel-sum求和函数的应用 一.Excel中sum求和函数的调用 直接输入"alt+="组合一键调用: 菜单选项中,选择公式求和: 直接 ...

  7. Python中的sum求和、reduce求和以及字典相加

    Sum求和 sum()函数语法: sum(iterable[, start]) 其中, iterable – 可迭代对象,如:列表(list).元组(tuple).集合(set).字典(diction ...

  8. sum求和,vag平均数,round四舍五入

    sum求和,vag平均数,round四舍五入 sum.avg.round ##(1)查询所有员工工资总和 select sum(sal) from emp; ##(2)查询所有员工工资总和.提成总和 ...

  9. groupby分组,并且sum求和

    –讲解:在做一些物品分类的时候,往往需要对一些相同类型的一个或者多个字段进行分类,最后还要对其数量累加,取平均值啊等等之类的,这时就需要用到groupby分组,然后再sum求和,当然除了通过group ...

  10. sum() 求和用法

    1 def func(*args): 2 # sum = 0 3 # for el in args: 4 # sum += el 5 # return sum 6 return sum(args) # ...

最新文章

  1. 【系统分析与设计】业务流程图绘制方法
  2. mysql iops_MySQL实例IOPS使用率高的原因和解决方法
  3. 挑选SaaS企业需要注意十要素
  4. 三星active2怎么连接手机_手机怎么连接隐藏的wifi无线网络
  5. Oracle 学习笔记 14 -- 集合操作和高级子查询
  6. MyEclipse2014+JDK1.7+Tomcat8.0+Maven3.2 开发环境搭建
  7. linux 修改默认语言
  8. 腾讯QQ for linux告别pre,开始beta
  9. visual studio 2015 比较代码差异的几种方法
  10. linux裁剪视频教程,适用于Linux桌面的超简单实用的视频裁剪应用
  11. 2018-2019年江苏省高等学校“阿里云大数据技术实战训练营”大学生万人计划学术冬令营开营... 1
  12. 校园网连不上,火绒检测dns错误但修复不了,360直接搞定,nice!
  13. IDEA2017配置springmvc遇到的错误
  14. 将台式机组成云服务器_四种旧PC台式电脑改造桌面云虚拟化的方案介绍
  15. Androd高清平板应用推荐之挖财2.0
  16. GW1NSR-LV4CQN48GC6/I5 FPGA呼吸灯
  17. Arcgis常用功能 Python脚本
  18. .bin 文件用excel文件打开_如何用最少的python代码合并多个Excel文件
  19. MATLAB编写拉格朗日插值与龙格现象
  20. 如何在论文中添加参考文献引用(以Word2016为例)

热门文章

  1. 搜索引擎网站提交入口
  2. CVPR2021 最具创造力的那些工作成果!或许这就是计算机视觉的魅力!
  3. 计算机信息资源管理岗位,信息资源管理专业的可以报考公务员的哪些职位?
  4. 大数据商业化应用的价值和应用场景是什么?
  5. 2021职业技能鉴定2021维修电工证(中级)考试题
  6. Day10--路由嵌套+项目前后台搭建
  7. 如何设计管理员和用户登录界面C语言,管理员登录设计(第7节)
  8. Entrez Direct
  9. 解决:Intellij idea导入MyEclipse Web项目时,服务器搭建运行正常,但无法访问WebRoot下的页面
  10. 青岛市中小学学籍系统服务器,全国各省市中小学学籍网登录入口