@TOC
四剑客 | 特点 | 擅长 |
---|---|---|
find | 找出文件 | 查找文件,目录,find与其他命令配合 |
grep、egrep | 过滤 | 过滤速度快,检查正则,加上颜色 |
sed | 过滤 | 过滤,替换(反向引用),取行,修改文件内容 |
awk | 过滤 | 过滤,取行,取列,统计与计算 |
1.find:star::star::star::star::star:
1.1.概述
1.2.find命令的基本用法:star::star::star::star::star:
find常用选项 | |
---|---|
-type | 类型f文件 d目录 |
-name | 指定文件名,默认精确匹配,加上*模糊 |
-size | 指定大小 +10M 大于10M -100k 小于100k |
curl cht.sh/find
1.2.1.找出/etc/目录下面以.conf结尾的文件
find /etc/ -type f -name '*.conf'
find 目录 类型 名字
find /etc/ -type f -name 'host*' #以host开头
找出/bin/ /sbin/ 文件中包含ip的文件
find /bin/ /sbin/ -type f -name '*ip*'
1.2.2.找出/etc/目录下面以.conf结尾的文件大于小于10k
find /etc/ -type f -name '*.conf' -size +10k
# 大于+
# 小于-
# 大于小于无符号
1.2.3.找出/var/log下面以.log结尾的文件并且修改时间大于3天
找出系统中比较旧的日志,文件。
根据时间查找
#3天之前
find /var/log/ -type f -name '*.log' -mtime +3
#最近3天
find /var/log/ -type f -name '*.log' -mtime -3
1.2.4.查找文件或目录的时候不区分大小写
find /etc/ -type f -iname '*.conf'
1.3.find与其他命令配合:star::star::star::star::star:
1.3.1.find找出文件后进行删除
类似的命令还有,查看,过滤,替换....
- 创建测试环境
mkdir -p /app/logs
touch /app/logs/access{01..10}.log
find /app/logs/ -type f -name '*.log'
- 方法01:find与反引号:star::star::star::star::star:
rm -f `find /app/logs/ -type f -name '*.log'`
- 方法02:find 管道:star::star::star::star::star:
find /app/logs -type f -name '*.log' | xargs rm -f
|与|xargs 区别
|传递的是字符串,文字符号
|xargs 传递的是参数 命令后面文件,目录
- 方法03:find选项 -exec:star::star::star::star::star:
find /app/logs -type f -name '*.log' -exec 命令 \;结束符号
find /app/logs -type f -name '*.log' -exec rm -f {} \;
-exec 命令 {} \;
{}前面find找出的文件内容
\;结尾标记.
1.3.2.找出/etc/下以.conf结尾的文件与打包压缩/backup/
- 方法01:find+反引号
tar czf /backup/etc-conf.tar.gz `find /etc/ -type f -name '*.conf'`
- 方法02:find | xargs
find /etc/ -type f -name '*.conf' | xargs tar czf /backup/etc-conf.tar.gz
- 方法03:find -exec :warning::warning::warning:
find /etc/ -type f -name '*.conf' -exec tar czf /backup/etc-conf.tar.gz {} \;
有坑,发现打包压缩后只有1个文件
tar tf /backup/etc-conf.tar.gz
find 与 -exec执行流程
find找出1个文件,exec执行1次
find /etc/ -type f -name '*.conf' -exec tar czf /backup/etc-conf.tar.gz {} +
+ 先执行前面命令执行完成,结果一次性性通过exec传递给后面的命令
1.3.3.find命令与cp/mv
开启yum缓存
vim /etc/yum.conf
keepcache=1 #开启缓存软件包功能
缓存/var/cache/yum目录 以.rpm结尾
需求:
把/var/cache/yum 目录 以.rpm结尾,复制/移动
- 01:find+反引号
cp `find /var/cache/yum/ -type f -name '*.rpm'` /backup/rpms/
- 02:find + | xargs
find /var/cache/yum/ -type f -name '*.rpm' | xargs cp -t /backup/rpms/
find与| xargs传参
cp /backup/rpms/ 参数 ... . .. . . .
cp 文件 目录 目录(目标)
cp -t 目录(目标) 文件 目录
cp /etc/hosts /etc/hostname /tmp/ \cp -t /tmp/ /etc/hosts /etc/hostname
- 03:find + exec
find /var/cache/yum/ -type f -name '*.rpm' -exec cp {} /backup/rpms/ \;
1.4.小结
:white_check_mark: find目录根据指定目录,文件类型,文件名,大小,时间查找文件/目录
:white_check_mark: find与一些命令搭配(rm,ls,查看命令,sed)
:white_check_mark: find与打包压缩
:white_check_mark: find与cp/mv
2.sed:star::star::star::star::star:
2.1.目标
:white_check_mark: sed增删改查
:white_check_mark: sed查找(类似于grep过滤):指定行号,过滤范围
:white_check_mark: sed替换功能
:white_check_mark: sed删除功能
:white_check_mark: sed增加功能(>>)
:white_check_mark: 脚本中sed与变量
2.2.sed命令查找:star::star::star::star::star:
sed命令格式 | 选项 | “找谁干啥” | 参数 |
---|---|---|---|
sed | -n | '3p' | /etc/passwd |
-n 取消默认输出一般与p 指令一起使用 | |||
-r sed命令支持扩展正则 | |||
-i 修改文件内容 | |||
-i.bak 先备份后修改 | |||
找谁:条件,指定行,范围 | |||
干啥:增删改查 |
2.2.1.根据行号进行过滤
sed -n '3p' /etc/passwd
打印第三行
-n 取消sed命令的默认输出
p输出print
2.2.2.根据行号范围进行过滤
# 从第3行开始到第9行结束
sed -n '3,9p' /etc/passwd
# 从第10行到最后一行
sed -n '10,$p' /etc/passwd
# 文件最后一行
sed -n '$p' /etc/passwd
2.2.3.类似于grep/egrep进行过滤
# 过滤指定内容 //
sed -n '/root/p' /etc/passwd
# 使用正则 记得加上-r
sed -nr '/root|dange/p' /etc/passwd
2.2.4.取出文件中某个范围的内容
seq 3 25 >num.txt
# 从包含5的行到包含15的行
sed -n '/5/,/15/p' num.txt
# 精确匹配
sed -n '/^5/,/^15/p' num.txt
2.2.5.日志处理案例access.log过滤出 11点00分到11:10分结束的标志
温馨提示:
:a: 先去检查下过滤是否精确
:b: 检查是否有对应时间点的日志(开始时间,结束时间)
- 是否精确
只用11:00 可能会匹配到11:00:00还有可能是11分00秒
11:00:00 多些一点点就行
- 是否存在的问题
grep '11:00:00' access.log | wc -l # 不存在
grep '11:10:00' access.log | wc -l # 存在多个
- 最后修改为11:02:00 到 11::10:00 范围的日志
sed -n '/11:02:00/,/11:10:00/p' access.log | wc -l
sed -n '/11:02:00/,/11:10:00/p' access.log >1102-1110.log
- 日志处理案例secure过滤出11点00分开始到11:10分结束的日志
grep '11:00:00' secure-20161219
grep '11:10:00' secure-20161219
# 过滤出日志
sed -n '/16 11:00:00/,/16 11:10:00/p' secure-20161219
# 统计数量
sed -n '/16 11:00:00/,/16 11:10:00/p' secure-20161219 | wc -l
# 统计失败的次数
sed -n '/16 11:00:00/,/16 11:10:00/p' secure-20161219|grep -i 'faild password'|wc -l
2.2.5.小结
- 查找功能
- 根据行号
- 类似于grep/egrep:进行过滤 //
- 范围的过滤:/从哪里来/,/到哪里去/ 日志过滤
2.3.sed改(替换):star::star::star::star::star:
2.3.1.把文件中的dange替换为libai
用于修改配置文件内容
's###g'
s sub替换 substitute
g 全局替换global
's###g'
's@@@g'
's///g'
cat >sed.txt<<EOF
dange
dange
dange
libai996
12306
EOF
sed 's#dange#libai#g' sed.txt
sed -i 's#dange#libai#g' sed.txt
- 修改文件之前通过sed命令进行备份,然后进行修改
sed -i.bak 's#dange#libai#g' passwd
- 先备份/etc/ssh/sshd_config到当前文件目录,然后修改
# Port 22 改为 Port 52114
sed 's|#Port 22|Port 52114|g$' sshd_config
# 修改之后的查看
egrep -v '^$|#' sshd_config
2.3.2.复制/etc/passwd到当前目录,把passwd文件的第1列和最后一列调换位置
对每一行的内容进行处理
sed命令反向引用/后向引用
- 简单例子
echo 123456 | sed -r 's#(12)(34)(56)#\3\2\1#g'
563412
把目标通过()括起来分组,后面通过\数字进行引用
- 操作
# 原始位置
[root@nfs01 ~]# head -n5 passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
# 替换为
[root@nfs01 ~]# sed -r 's#^(.*)(:x.*:)(.*)#\3\2\1#g' passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
/sbin/nologin:x:3:4:adm:/var/adm:adm
/sbin/nologin:x:4:7:lp:/var/spool/lpd:lp
# 替换为
[root@nfs01 ~]# sed -r 's#^(.*)(:x.*:.*/)(.*)#\3\2\1#g' passwd
bash:x:0:0:root:/root:/bin/root
nologin:x:1:1:bin:/bin:/sbin/bin
nologin:x:2:2:daemon:/sbin:/sbin/daemon
nologin:x:3:4:adm:/var/adm:/sbin/adm
nologin:x:4:7:lp:/var/spool/lpd:/sbin/lp
2.3.3.sed替换小结
- sed替换格式,选项-i.bak
- 's###g'
- sed对数据进行精加工:第1列,最后1列
2.4.sed删除:star::star::star::star::star:
按照行
d===delete
#删除第3行
seq 10 | sed '3d'
#删除以1开头的行
seq 10 | sed '/^1/d'
2.5.sed增加:star::star::star::star::star:
- cai 菜 clean append insert
- a append在指定行下面增加1行
- i insert在指定行上面增加1行
- c replace/clean 清空指定行,然后写入内容
# a append在指定行后面追加一行
[root@nfs01 ~]# seq 10 | sed '3a dange'
1
2
3
dange
4
5
6
7
8
9
10
# i insert在指定行上面增加1行
[root@nfs01 ~]# seq 10 | sed '3i dange'
1
2
dange
3
4
5
6
7
8
9
10
# c replace/clean 清空指定行,然后写入内容
[root@nfs01 ~]# seq 10 | sed '3c dange'
1
2
dange
4
5
6
7
8
9
10
2.6.sed命令与变量
cat >sed.txt<<EOF
dange
dange
dange
libai996
12306
EOF
src=dange
dest=libai
sed "s#$src#$dest#g" sed.txt
[root@nfs01 ~]# src=dange
[root@nfs01 ~]# dest=libai
[root@nfs01 ~]# sed "s#$src#$dest#g" sed.txt
libai
libai
libai
libai996
12306
2.7.总结
[ ] 可以根据过滤需求在基础正则和扩展正则中进行选择:==^ $ ^$ .* [] | + ()==
- [ ] grep/egrep过滤
- [ ] sed过滤,替换,删除,修改文件内容
- [ ] awk过滤,取列
- [ ] 会使用sed命令取行(行号),取行(范围)
- [ ] 会使用sed命令替换
- [ ] 会使用sed命令进行对数据加工(反向引用)
- [ ] sed使用变量
3.awk:star::star::star::star::star:
3.1.目标
- 使用awk取行
- 使用awk取列
- 使用awk取行+取列
- 通过awk进行初步计算与统计(eg,统计次数(wc -l),求和)
3.2.取行
类似于sed , grep,使用起来更加方便
3.2.1.取出/etc/passwd第3行
NR awk中的内置变量
NR Number of Record 记录号,行号
==2个等号表示等于
# 取出第一行
awk 'NR==1' passwd
# 取出大于等于第三行,小于等于第10行的区间
awk 'NR>=3 && NR<=10' passwd
# 取出大于等于第三行的
awk 'NR>=3' passwd
3.2.2.取出/etc/passwd 第3行到10行
awk 'NR>=3' passwd
== 等于
!= 不等于
>= 大于等于
> 大于
<= 小于等于
< 小于
awk 'NR>=3 && NR<=10' passwd
&& 并且,2个条件同时成立
3.2.3.取出/etc/passwd 中包含bash的行
类似于egrep/grep/sed -n '//p'
awk过滤只需要使用//即可
grep 'bash' passwd
sed -n '/bash/p' passwd
awk '/bash/' passwd
- awk使用正则
awk '/root|dange/' passwd
3.2.4.取出日志中指定时间段内的日志
- 取出范围的日志的格式
seq 5 20 | head -n '/从哪里来/ , /到哪里去/p'
seq 5 20 | awk '/从哪里来/ , /到哪里去/p'
- 取出时间范围日志
过滤出11号15:00到16:00的日志
检查是否有11号的15:00的日志
grep '11 15:00' secure-20161219 | wc -l
检查是否有11号的16:00的日志
grep '11 16:00' secure-20161219 | wc -l
sed -n '//,//p' secure-20161219
sed -n '/11 15:00/,/11 16:00/p' secure-20161219 | wc -l
sed -n '/11 15:00/,/11 16:00/p' secure-20161219 > secure-15-16
- 过滤access.log与注意事项
过滤11:30分到11:31分日志
sed -n '/22.Nov.2015:11:30:00/,/22.Nov.2015:11:31:00/p' access.log | wc -l
sed -n '/22\/Nov\/2015:11:30:00/,/22\/Nov\/2015:11:31:00/p' access.log | wc -l
sed -n '/\[22\/Nov\/2015:11:30:00/,/\[22\/Nov\/2015:11:31:00/p' access.log | wc -l
[root@nfs01 ~]# head -n2 access.log
101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/sea-modules/gallery/zepto/1.1.3/zepto.js HTTP/1.1" 200 24662 "http://m.oldboyedu.com.cn/mobile/theme/oldboyedu/home/index.html" "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; HUAWEI CRR-UL00 Build/HUAWEICRR-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.7.51_rbb7fa12.660 NetType/3gnet Language/zh_CN"
101.226.61.184 - - [22/Nov/2015:11:02:00 +0800] "GET /mobile/theme/oldboyedu/common/js/baiduAnalytics.js HTTP/1.1" 200 526 "http://m.oldboyedu.com.cn/mobile/theme/oldboyedu/home/index.html" "Mozilla/5.0 (Linux; U; Android 5.1.1; zh-cn; HUAWEI CRR-UL00 Build/HUAWEICRR-UL00) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.4 TBS/025478 Mobile Safari/533.1 MicroMessenger/6.3.7.51_rbb7fa12.660 NetType/3gnet Language/zh_CN"
[root@nfs01 ~]# sed -n '/22.Nov.2015:11:30:00/,/22.Nov.2015:11:31:00/p' access.log | wc -l
3204
[root@nfs01 ~]# sed -n '/22\/Nov\/2015:11:30:00/,/22\/Nov\/2015:11:31:00/p' access.log | wc -l
3204
[root@nfs01 ~]# sed -n '/\[22\/Nov\/2015:11:30:00/,/\[22\/Nov\/2015:11:31:00/p' access.log | wc -l
3204
3.2.5.小结
- 类似于sed命令
- NR内置变量用于表示行号
- Number of Record 记录号(行号)
- 结合符号== != >= <= > <
3.3.取列
3.3.1.取出ls -l /etc/hosts 文件第3列,最后一列
NF awk 内置变量
NF Number of Fields 每一行有多少列,列数 $NF
ll /etc/hosts | awk '{print $3,$5,$(NF-1),$NF}'
# 取出第5列和最后一列
ll | awk '{print $5,$NF}'
# 取出列进行对齐
ll | awk '{print $5,$NF}' | column -t
column -t 对前面的内容进行对齐
# 取出列进行对齐
[root@nfs01 ~]# ll | awk '{print $5,$NF}' | column -t
66912
59404199 access.log
9080283 access_log
3033 anaconda-ks.cfg
3595 initial-setup-ks.cfg
3.3.2.取出/etc/passwd第1列第3列和最后一列
awk中默认认为每一列的标记是空格,awk默认的分隔符是==空格==
一些文件或命令的结果中,每一列不是以空格分割,这时候我们需要通过awk -F选项指定新的分隔符
==awk -F可以指定分隔符==
[root@nfs01 ~]# awk -F: '{print $1,$3,$NF}' passwd | column -t
root 0 /bin/bash
bin 1 /sbin/nologin
daemon 2 /sbin/nologin
adm 3 /sbin/nologin
lp 4 /sbin/nologin
3.3.3.取出ip a s eth0 中的ip地址
ip a # ip address
ip a s eth0 # ip address show eth0显示指定网卡的信息
awk -F支持正则表达式,正则匹配到的内容将成为分隔符
ip a s ens33 | awk 'NR==3' | awk -F'[ /]+' '{print $3}'
ip a s ens33 | awk 'NR==3' | awk -F'inet |/24' '{print $2}'
ip addr show ens33 | awk -F'[ /]+' 'NR==3{print $3}'
[root@nfs01 ~]# ip addr show ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:35:e5:0b brd ff:ff:ff:ff:ff:ff
inet 10.0.0.31/24 brd 10.0.0.255 scope global noprefixroute ens33
valid_lft forever preferred_lft forever
inet6 fe80::b3ec:9b3a:4067:42a/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@nfs01 ~]# ip addr show ens33 | awk 'NR==3'
inet 10.0.0.31/24 brd 10.0.0.255 scope global noprefixroute ens33
[root@nfs01 ~]# ip addr show ens33 | awk 'NR==3{print $2}'
10.0.0.31/24
[root@nfs01 ~]# ip addr show ens33 | awk -F'[ /]+' 'NR==3{print $3}'
10.0.0.31
3.3.4.显示/etc/passwd每一行的内容和行号
cat -n
NR表示行号
print输出
$0 整行,这一行的内容
awk '{print NR}' passwd
awk '{print NR,$0}' passwd
awk 'NR>=3{print $0}' passwd
[root@nfs01 ~]# awk '{print NR,$0}' passwd
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3.3.5.uptime取出运行时间
cat /proc/uptime| awk -F. '{
run_days=$1 / 86400;
run_hour=($1 % 86400)/3600;
run_minute=($1 % 3600)/60;
run_second=$1 % 60;
printf("系统已运行:%d天%d时%d分%d秒\n",run_days,run_hour,run_minute,run_second)
}';
系统已运行:29天18时47分34秒
系统已运行:0天1时26分56秒
[root@backup ~]# uptime
11:10:05 up 1:38, 1 user, load average: 0.00, 0.00, 0.00
[root@backup ~]# uptime | awk -F'[ ,]' '{print $5}'
1:39
3.3.6.取列小结
- 取列小结awk '{print $xxx}'
- $1 $2 .. $NF取列
- $(NF-1) 取倒数第2列
- awk -F 选项指定分隔符,分隔符相当于是菜刀,每一列的结束标记
- awk -F 选项支持正则
3.4.取行与取列
3.4.1.awk命令格式
awk -F: 'NR==1{print $1,$3,$NF}' passwd
awk 选项 '找谁{干啥}' passwd
找谁:条件 用于让awk定位到某一行或几行
干啥:动作 满足上面条件后(找到这行后)如何处理这一行。print取列
动作部分可以省略,输出这一行的内容相当于
awk 'NR==3' /passwd #显示第3行的内容
awk 'NR==3{print $0}' /passwd #显示第3行的内容
3.4.2.取出ip a s eth0中的ip地址
ip a s eth0 | awk 'NR==3' | awk -F'[ /]+' '{print $3}'
ip a s eth0 | awk -F'[ /]+' 'NR==3{print $3}'
3.4.3.取出/etc/passwd的第三列UID大于等于0,小于等于900的行
awk -F: '$3>=0 && $3<=900' passwd
3.4.4.取出系统磁盘使用率df -h大于10%的行
df -h | awk -F'[ %]+' 'NR>1 && $5>=10'
[root@nfs01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 3.3G 0 3.3G 0% /dev
tmpfs 3.3G 0 3.3G 0% /dev/shm
tmpfs 3.3G 9.2M 3.3G 1% /run
tmpfs 3.3G 0 3.3G 0% /sys/fs/cgroup
/dev/sda3 97G 4.2G 93G 5% /
tmpfs 3.3G 0 3.3G 0% /tmp
/dev/sda1 1014M 167M 848M 17% /boot
tmpfs 666M 0 666M 0% /run/user/0
[root@nfs01 ~]# df -h | awk -F'[ %]+' 'NR>1 && $5>=10'
/dev/sda1 1014M 167M 848M 17% /boot
3.4.5.过滤某一列中有什么
根据指定的列进行过滤:如果第3列中包含xxxx则显示这一行
sed,grep都是基于行,这一行中有或没有xxxx
$xxx~// 匹配,包含
$xxx!~// 匹配,不包含
- /etc/passwd中第3列UID包含0或1,输出这一行的第1列,第3列和最后一列
条件:行 第3列包含0或1
动作:列 输出第1列,3列,最后一列
awk -F: '$3~/[01]/ {print $1,$3,$NF}' passwd
- /etc/passwd中第3列UID包含0或1结尾,输出这一行的第1列,第3列和最后一列
awk -F: '$3~/[01]$/ {print $1,$3,$NF}' passwd
^ 某一列的开头
$ 某一列的结尾
- 过滤出access.log中第7列以.jpg或.bmp或.png或.gif结尾的行,统计行数
access.log nginx访问日志,只要访问就会有记录
第1列 ip地址
第7列 用户访问的页面路径
第9列 状态码,访问结果正常,异常
第10列 页面大小
awk '$7~/\.jpg$|\.bmp$|\.gif$|\.png$/' access.log
awk '$7~/\.(jpg|bmp|gif|png)$/' access.log
awk '$7~/\.jpg$|\.bmp$|\.gif$|\.png$/' access.log |wc -l
awk '$7~/\.(jpg|bmp|gif|png)$/' access.log |wc -l
3.5.awk计算与统计
3.5.1.目标
- 记忆awk两个常用公式
- 使用awk进行求和
- 使用awk进行计算的百分数(一般会与结合取行取列)
3.5.2.通过awk实现wc -l效果
计数,统计次数
未来统计次数的需求,推荐使用wc -l
awk '{统计与计算} END{awk读取文件后,才会执行,一般用于输出最后的结果}' xxx
i=i+1
i=666
i=i+1 ==== i++
i+1执行,结果写入到i
当前的i 执行i=i+1 之后的i
第1次运行 0 i=0+1 1
第2次运行 1 i=1+1 2
第3次运行 2 i=2+1 3
awk '{i=i+1}END{print i}' calc.txt
awk '{i++}END{print i}' calc.txt
[root@nfs01 ~]# cat calc.txt |column -t
libai 19
wangwu 30
huzi 80
xiaozhang 30
[root@nfs01 ~]# awk '{i++}END{print i}' calc.txt
4
[root@nfs01 ~]# awk '{i=i+1}END{print i}' calc.txt
4
[root@nfs01 ~]# wc -l calc.txt
4 calc.txt
[root@nfs01 ~]# awk '{i=i+$2}END{print i}' calc.txt
159
3.5.3.统计seq 10结果的总和
[root@nfs01 ~]# seq 10 | awk '{sum=sum+$1} END {print sum}'
55
- access.log是访问日志,日志的第10列,是用户访问的资源的大小,对大小求和,形式以MB或GB形式展示
[root@nfs01 ~]# awk '{i=i+$10}END{print i}' access.log
2478496663
[root@nfs01 ~]# awk '{i=i+$10}END{print i/1024/1024"MB"}' access.log
2363.68MB
[root@nfs01 ~]# awk '{i=i+$10}END{print i/1024/1024/1024"GB"}' access.log
2.30828GB
3.5.4.统计free结果中内存空闲率
END{}一般用于数据分散在不同的行,需要使用END{}
[root@nfs01 ~]# free
total used free shared buff/cache available
Mem: 6819580 233096 6226252 9360 360232 6332088
Swap: 2097148 0 2097148
[root@nfs01 ~]# free | awk 'NR==2'
Mem: 6819580 232948 6226400 9360 360232 6332236
[root@nfs01 ~]# free | awk 'NR==2{print $NF}'
6332564
[root@nfs01 ~]# free | awk 'NR==2{print $NF/$2*100}'
92.8606
[root@nfs01 ~]# free | awk 'NR==2{print $NF/$2*100"%"}'
92.8625%
评论