文章目录
awk实例
1. 简单的日志分割
使用 awk
分割日志文件,提取所需的字段。下面的例子展示了如何从 /var/log/messages
文件中提取第 1、7、9 个字段:
awk '{print $1, $7, $9}' /var/log/messages
- 说明:
$1
、$7
和$9
是awk
的内置变量,分别表示每行日志文件中的第 1、第 7 和第 9 个字段。 - 操作: 使用
print
命令打印这些字段,并以空格分隔。 - 文件路径:
/var/log/messages
,awk
会自动对文件中的每行进行处理并输出结果。
2. 只分割前两行内容的第一个和第四个字段
awk 'NR<=2{print $1, $4}' /var/log/messages
- 说明:
NR
是awk
的内置变量,表示当前处理的行号。NR<=2
表示只处理前两行。 - 操作: 打印第 1 和第 4 个字段。
3. 取小数点几位和取整数
使用 awk
取出浮点数的小数点位数或整数部分:
result=$(awk 'BEGIN{printf "%.2f", 2.331*2.542}') # 取小数点后2位
result=$(awk 'BEGIN{printf "%.F", 2.331*2.542}') # 只取整数部分
4. 提取 host.txt
主机名并保存回文件
给定文件 file.txt
的内容如下,提取主机名(第二字段)并保存到 host.txt
文件中:
1 www.kgc.com
2 mail.kgc.com
3 ftp.kgc.com
4 linux.kgc.com
5 blog.kgc.com
cat file.txt | awk -F '[ .]+' '{print $2}' >> host.txt
- 说明:
F '[ .]+'
指定awk
的字段分隔符为空格或句点。 - 操作: 使用
print $2
提取第二个字段(主机名)。
5. 统计磁盘总共使用容量
计算磁盘的可用容量,排除 tmpfs
文件系统:
df | tail -n +2 | grep -v tmpfs | awk '{sum+=$4} END{print "磁盘可用容量:"sum/1024/1024"G"}'
- 操作: 累加第四个字段(磁盘可用容量)并将结果转换为 GB 格式。
6. 统计 /etc
目录下文件总大小
计算 /etc
目录下所有普通文件的总大小:
ls -l /etc | awk '/^-/{sum+=$5} END{print "文件总大小:"sum/1024"M"}'
- 操作: 累加第五个字段(文件大小),并将结果转换为 MB 格式。
7. 获取 CPU 使用率
使用 top
命令获取 CPU 使用率(用户空间和内核空间):
sum=$(top -b -n 1 | grep -w st | awk '{print $2+$4}')
echo $sum
# 或不赋值变量,直接输出
top -b -n 1 | grep -w st | awk '{print $2+$4}'
- 选项:
-b
以批处理模式运行,没有交互界面,这意味着它将输出结果到控制台一次,然后退出。。-n 1
指定 top 在退出之前应运行的迭代次数,此处只运行一次。
- 说明:
$2
是us
(用户空间占用 CPU 百分比),$4
是sy
(内核空间占用 CPU 百分比),$2+$4
计算总使用率。
8. 统计内存使用情况
使用 free
命令统计当前内存的使用量和总量,并计算使用占比:
memory_used=$(free -m | grep "Mem:" | awk '{print $3 }')
# 使用量
memory_total=$(free -m | grep "Mem:" | awk '{print $2 }')
# 总计
# 打印内存使用情况
echo "当前内存的使用量: $memory_used MB"
echo "当前内存的总量: $memory_total MB"
# 计算使用百分比
z=$(echo "scale=2;${memory_used}/${memory_total}*100" | bc)
echo "内存使用百分比: $z%"
# 提取整数部分
b=$(echo $z | awk -F '.' '{print $1}')
echo "当前的使用占比: ${b}%"
# 检查使用量是否正常
if [ $b -lt 90 ]; then
echo "内存的使用量正常: ${b}%"
else
echo "内存的使用量为: ${b}%, 大于90%, 请注意!"
fi
9. 监控硬盘使用率
通过 df
命令监控特定挂载点的使用率:
a=$(df -h | grep -w centos-root | awk '{print $5}' | tr -d "%")
# 提取使用率并去掉%
echo "当前 centos-root 使用率: $a%"
b=$(echo "$a" | sed 's/%//g')
# 若没去除百分号,此段去除百分号并赋值给另一个变量
echo $b
- 说明:
df -h
列出硬盘使用信息,grep -w centos-root
过滤特定挂载点,awk '{print $5}'
获取使用率,tr -d "%"
去掉百分号。