Shell编程:文本处理器(awk应用实例)



awk实例

1. 简单的日志分割

使用 awk 分割日志文件,提取所需的字段。下面的例子展示了如何从 /var/log/messages 文件中提取第 1、7、9 个字段:

awk '{print $1, $7, $9}' /var/log/messages
  • 说明: $1$7$9awk 的内置变量,分别表示每行日志文件中的第 1、第 7 和第 9 个字段。
  • 操作: 使用 print 命令打印这些字段,并以空格分隔。
  • 文件路径: /var/log/messagesawk 会自动对文件中的每行进行处理并输出结果。

2. 只分割前两行内容的第一个和第四个字段

awk 'NR<=2{print $1, $4}' /var/log/messages
  • 说明: NRawk 的内置变量,表示当前处理的行号。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 在退出之前应运行的迭代次数,此处只运行一次。
  • 说明: $2us(用户空间占用 CPU 百分比),$4sy(内核空间占用 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 "%" 去掉百分号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值