awk及sum求和!
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求和!的更多相关文章
- 从sum()求和引发的思考
sum()求和是一个非常简单的函数,以前我的写法是这样,我想大部分和我一样刚开始学习JS的同学写出来的也会是这样. function sum() { var total=null; for(var i ...
- sum() 求和用法
def func(*args): # sum = 0 # for el in args: # sum += el # return sum return sum(args) # sum() 求和 de ...
- mysql sum() 求和函数的用法
查询在record表中 name=? 的 money 加起来的值使用聚和函数 sum() 求和select sum(money) from record t where t.name = ?另外:co ...
- Django学习路17_聚合函数(Avg平均值,Count数量,Max最大,Min最小,Sum求和)基本使用
使用方法: 类名.objects.aggregate(聚合函数名('表的列名')) 聚合函数名: Avg 平均值 Count数量 Max 最大 Min 最小 Sum 求和 示例: Student.ob ...
- awk统计命令(求和、求平均、求最大值、求最小值)
本节内容:awk统计命令 1.求和 cat data|awk '{sum+=$1} END {print "Sum = ", sum}' 2.求平均 cat data|awk '{ ...
- excel sum求和遇到的问题及解决
在偶遇的,借助excel公式sum对一个数字数组进行求和,结果为0,很是诧异,当然原因就是,数组里的数字是“常规”格式,不是“数值”格式,由于系统生成的excel,不方便生成的同时再做格式的设置,于是 ...
- sum求和类题目
今天看到这道题目:http://www.cnblogs.com/charlesblc/p/5930311.html 题目地址:https://leetcode.com/problems/split-a ...
- LeetCode解题报告--2Sum, 3Sum, 4Sum, K Sum求和问题总结
前言: 这几天在做LeetCode 里面有2sum, 3sum(closest), 4sum等问题, 这类问题是典型的递归思路解题.该这类问题的关键在于,在进行求和求解前,要先排序Arrays.sor ...
- mysql语句sum求和为null的问题
select sum(price) as price from order where status='SUCCESS'; 如果price对应的所有的值为0,那么算出来的和为null: 可以采用ifn ...
随机推荐
- linux查看公网ip的方法
curl ifconfig.me 或者 curl cip.cc
- 【代码学习】PYTHON 列表循环遍历及列表常见操作
一.for循环 为了更有效率的输出列表的每个数据,可以使用循环来完成 代码: A = ['xiaoWang','xiaoZhang','xiaoHua'] for tempName in A: pri ...
- PyQt5单元格操作大全
1.显示二维列表数据(QTableView)控件 '''显示二维列表数据(QTableView)控件数据源model需要创建一个QTableView实例和一个数据源model,然后将其两者关联 MVC ...
- PyQt5的菜单栏、工具栏和状态栏
1.创建菜单栏import sys, mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore impor ...
- 新建文件的UID和GID
默认情况下:新建文件的用户ID为操作当前文件进程的有效用户ID(参考以前文章),新建文件的组ID为操作当前文件的进程的有效组ID 特殊情况:当当前新建文件的目录的SET-GID位被设置时,那么新建文件 ...
- 关于雷达(Radar)信道
有些时候,我们在实际的无线网络中,会遇到无线信道一致flapping的情况,即便我们自定义了信道的,发现也会出现flapping.如果这种情况,可能需要确认是否你使用的信道上检测到了雷达. 这里记录一 ...
- 重新梳理IT知识之java-04数组
一.数组的概述 1.数组的理解:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理. 2.数组的相关概念 数组名 元素 索引 数组的 ...
- 虚拟机设置固定IP从而使同一局域网可以访问
没有ifcfg-eth0 时:https://www.cnblogs.com/itboxue/p/11186910.html (1)关机,将网络模式设置成桥接模式 (2)开机 进入 cd /etc/s ...
- Python中的代码块及其缓存机制、深浅copy
一.代码块及其缓存机制 代码块 一个模块.一个函数.一个类.一个文件等都是一个代码块:交互式命令下,一行就是一个代码块. 同一个代码块内的缓存机制(字符串驻留机制) 机制内容:Python在执行同一个 ...
- Android读取权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <use ...