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
more -
-
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
feet -
ip 192.168.200.111
aBggfH
gaglag1

输出所有偶数行 [root@localhost ~]# awk '(NR%2)==0{print}' awk.txt
banner
food
more
-
ip 192.168.200.1
ip 192.168.200.11
Bggsgs
输出首字母是大写的

[root@localhost ~]# awk '/^[A-Z]/{print}' awk.txt
Bggsgs
Mem:剩余多大内存

[root@localhost ~]# free
total used free shared buff/cache available
Mem:
Swap:
[root@localhost ~]# free | awk '/Mem:/{print int($3/$2*100)"%"}' $3表示第三列,$2表示第二列
% 过滤出free总容量

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

过滤IP地址

[root@localhost ~]# ifconfig ens33
ens33: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.200.115 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::656c::c062:6af7 prefixlen scopeid 0x20<link>
ether :0c::c3:ed: txqueuelen (Ethernet)
RX packets bytes (1.4 MiB)
RX errors dropped overruns frame
TX packets bytes (251.2 KiB)
TX errors dropped overruns carrier collisions [root@localhost ~]# ifconfig ens33 | awk -F '[ :]+' 'NR==2 {print $3}'
192.168.200.115
、提取出/etc/passwd 文件当中,UID小于1000的用户名信息和UID信息

[root@server0 ~]# awk -F : ' $3<1000  {print $1,$3}' /etc/passwd

、提取出/etc/passwd文件当中,shell环境为”/bin/bash”的用户信息有shell信息

[root@server0 ~]# awk -F : ' $NF== "/bin/bash"  {print $1,$NF}' /etc/passwd

、提取出/etc/passwd文件当中,第一行到第5行的用户名相关信息

[root@server0 ~]# awk -F : ' (NR>=1&&NR<=5) {print $1}' /etc/passwd

、打印/et/passwd奇数行

[root@server0 ~]# awk -F : '{if (NR%2!=0) print $0}' /etc/passwd

、 打印UID不等于GID的用户名

[root@server0 ~]# awk -F : '{if ($3!=$4) print $1}' /etc/passwd

.awk提取登录用户ip地址

[root@fengxiaoli41 ~]# who |tail -|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

awk及sum求和!的更多相关文章

  1. 从sum()求和引发的思考

    sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i ...

  2. sum() 求和用法

    def func(*args): # sum = 0 # for el in args: # sum += el # return sum return sum(args) # sum() 求和 de ...

  3. mysql sum() 求和函数的用法

    查询在record表中 name=? 的 money 加起来的值使用聚和函数 sum() 求和select sum(money) from record t where t.name = ?另外:co ...

  4. Django学习路17_聚合函数(Avg平均值,Count数量,Max最大,Min最小,Sum求和)基本使用

    使用方法: 类名.objects.aggregate(聚合函数名('表的列名')) 聚合函数名: Avg 平均值 Count数量 Max 最大 Min 最小 Sum 求和 示例: Student.ob ...

  5. awk统计命令(求和、求平均、求最大值、求最小值)

    本节内容:awk统计命令 1.求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 2.求平均 cat data|awk '{ ...

  6. excel sum求和遇到的问题及解决

    在偶遇的,借助excel公式sum对一个数字数组进行求和,结果为0,很是诧异,当然原因就是,数组里的数字是“常规”格式,不是“数值”格式,由于系统生成的excel,不方便生成的同时再做格式的设置,于是 ...

  7. sum求和类题目

    今天看到这道题目:http://www.cnblogs.com/charlesblc/p/5930311.html 题目地址:https://leetcode.com/problems/split-a ...

  8. LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结

    前言: 这几天在做LeetCode 里面有2sum, 3sum(closest), 4sum等问题, 这类问题是典型的递归思路解题.该这类问题的关键在于,在进行求和求解前,要先排序Arrays.sor ...

  9. mysql语句sum求和为null的问题

    select sum(price) as price from order where status='SUCCESS'; 如果price对应的所有的值为0,那么算出来的和为null: 可以采用ifn ...

随机推荐

  1. Vue-cli 多页相关配置记录

    Vue-cli 多页相关配置记录 搭建一个顺手的MPA项目脚手架,其实根据项目的不同目录结构和打包配置都可以进行灵活的调整.这次的项目可能是包含各种客户端和管理后台在一起的综合项目所以需要将样式和脚本 ...

  2. Jmeter BeanShell笔记

    前言:beanshell是支持java语法的,因此当一些复杂的数据结构jmeter处理不了的时候,我们可以借助于java来实现 1,使用beanshell处理JDBC请求返回的值 数据库结构 当JDB ...

  3. wordpress 添加友情链接

    最近入了wordpress的坑,虽然还没深入,但是好歹弄了点东西了:) 一般网站都有友情链接这个东东吧,看网上说这个有个插件的,叫“Link Manager”,添加完了以后就能添加了,可是我今天去搜的 ...

  4. 设计模式开始--UML类之间关系表示

    平常写代码写的比较多,没有从架构的层次了解类与类之间的关系,下面就从代码的层面论述UML中类与类质之间的关系 实线的关系要强于虚线 1.extends 表示继承 2.implements表示实现 3. ...

  5. LCT 维护边双 / 点双的模板

    用 \(\text{LCT}\) 维护边双的做法是:加入一条非树边时,将这段树上路径合并为一个点代表这个边双,具体实现用并查集合并点,在 \(\text{Splay}\) 与 \(\text{Acce ...

  6. C:变量的声明与定义

    声明变量不需要建立存储空间,如:extern int a; 定义变量需要建立存储空间,如:int b; #include <stdio.h> int main() { //extern 关 ...

  7. cf 76 div2

    传送门 题意 t组样例 n个学生, x最多交换次数 a交换的第一个位置 b交换的第二个位置 最多是交换n-1次,不懂的话可以找个数列自己模拟一下: 然后其他的就是abs(a-b)+x;两个位置之间的距 ...

  8. CodeForces-220B Little Elephant and Array

    小象喜欢玩数组.他有一个数组a,由n个正整数组成,从1到n进行索引.让我们用索引i表示数字ai. 此外,小象对数组还有m个查询,每个查询的特征是一对整数lj和rj(1 ≤ lj ≤ rj ≤ n).对 ...

  9. spring boot中配置文件中变量的引用

    配置文件中 变量的自身引用 ${名称} java文件中引用:非静态变量 之间在变量上面注释@Value("${名称}")  静态变量 在set方法上注释@Value("$ ...

  10. 思科Catalyst 9K

    思科的新一代产品Catalyst9K,里面涉及了Catalyst9200.Catalyst9300.Catalyst9400.Catalyst9500.Catalyst9600和Catalyst980 ...