管道 |
进程间通信的手段,能够连接两条命令,前一条命令的结果交给后面一条命令使用
管道常用的处理指令
grep 过滤
后面跟需要过滤的内容
与过滤的内容取反:grep -v 过滤内容
sort 排序
默认从小到大
-r 反转排序
-n 按数值排序
-k 指定字段(-k1 按第一列字段排序,-k2 第二列.....)
uniq 去重
使用之前需要排序(uniq前必有sort),且保证只有一列字段
-c 统计字段重复的次数
awk 获取想要的数据
利用行和列获取数据
获取第n列数据
实例:
查看服务器所有的用户:cat /etc/passwd | awk -F: ‘{print $1}’
查看服务器的登录shell:cat /etc/passwd | awk -F: ‘{print $NF}’
系统中都用到的登录shell(去重):cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq
统计一下每个登录shell被使用了几次:cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq -c
获取被使用次数最多的登录shell:cat /etc/passwd | awk -F: '{print $NF}' |sort | uniq -c | sort -nr -k1 | head -1
-F可以指定分隔符,不加-F,默认分隔符为空格
$1 第一列
$10 第十列
$NF 最后一列
$(NF-1) 倒数第二列
查看第m行第n列的数据
实例:
查看当前的空闲内存:
free -m | awk ‘NR==2{print $4}’ (第二行第四列)
df -Th 获取磁盘使用情况
只能看已经挂载的磁盘或分区
实例:
获取根目录使用百分比:df -Th | awk 'NR==6{print $(NF-1)}'
wc -l 统计行数
关于管道的综合实例
access.log是nginx访问日志文件,对其做以下操作:
1.获取到所有的IP地址
cat access.log | awk '{print $1}'
2.获取到所有IP的个数(统计某一网站访问次数;统计某一网站PV量)
cat access.log | awk '{print $1}' |wc -l
3.获取所有的IP地址(去重)(统计某一网站访问的人有那些)
cat access.log | awk '{print $1}' | sort -n |uniq
4.统计某一网站访问人数(UV)
cat access.log | awk '{print $1}' | sort -n |uniq |wc -l
5.每个IP地址的个数(每个IP访问的次数)
cat access.log | awk '{print $1}' | sort | uniq -c
6.获取访问次数前三的人/IP地址
cat access.log | awk '{print $1}' | sort | uniq -c |sort -rn -k1 | head -3