标签搜索

四剑客

lilymaxyz
2024-12-12 / 0 评论 / 4 阅读 / 正在检测是否收录...

@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%

4.grep:star::star::star::star::star:

5.

endl

0

评论

博主关闭了所有页面的评论