统计行数
awk 'END { print "total:" NR}' a3.txt
显示空行
awk '/^$/ {print NR}' a2.txt
第二列求和
awk '{sum1+=$2} END {print sum1}' a3.txt
第二列求avg
awk '{avg +=$2/NF} END {print avg}' a3.txt
awk '{avg +=$2} END {print avg/NF}' a3.txt
单词数
awk '{total+=NF}END{print total}' a3.txt
字符串的数量
awk '{total+= lenth} END {print total}' a3.txt
首行添加标题,并重新排序
awk 'BEGIN {print "name\value"} {print $2,$1}' a3.txt
输出带有某字符的行
awk '/7/ {print}' a3.txt
输出以a开头的行
awk '$1 ~ /^a/ {print}' a3.txt
定义函数:
awk 'function test(x){return "value is:"x}{print test($2)}' a3.txt
根据条件执行不同的操作:
awk '{if ($2>50)print $2">50";else print $2"<50"} ' a3.txt
统计不同ip地址都访问次数
awk '{count[$1]++} END {for (ip in count) print ip,count[ip]}' access.log
批量添加.bak文件
ls | awk '{print "cp "$0" "$0".bak"}' | sh
监控文件变化:
ls -lh /home/ | awk '{print $5,$6,$8,$7,$9}'
计算某个进程的内存使用量:
ps -p 1539 -o rss | awk 'NR>1{print $1}'
获取内网外网ip地址:
ifconfig | awk '/inet / {print $2}'
使用awk实现加法:
echo 2+3 | awk '{print $0"=" $1+$3}'
shell相关:
检查文件是否存在
if[-e /root/file1.txt ]; then echo "存在"; else echo "不存在"; fi
无序数据排序:
sort -n | awk '{print "" $2}' a3.txt |sh
搜索指定文件夹里面的内容:
grep -r "123" /root | cut -d ":" | sort -u
wc去重排序:
awk -F "[ ,. ]+" '{for(i=1;i<=NF;i++)s[$i]++} END {for (key in s) print s[key],key}' a3.txt |sort -rn | head | head
找出局域网内存活的主机
ping 127.0.0.1 -c 2 | awk 'NR==6{print $4}'
#如果ip地址存活就是2个数据包,如果不存活就是1,由此可以递归扫描网段里面存活的服务器
eg:
#bin/bash
count =0
for i in 192.168.0.{1..254}
do
receive = $(ping $i -c 2 | awk 'NR==6{print $4}')
if [$receive -gt 0]
then
echo "${i} 在线"
let count++
else
echo "${i} 不在线"
fi
done
echo "在线服务器的个数:"${count}
备份mysql的数据
#!/bin/sh
user=root
pass=root
backfile=/root/mysgl/backup #备份路径
[ ! -d Sbackfile ] && mkdir -p sbackfile #判断是否有备份路径cmd="mysg1 -u$user -p$pass" #登录数据库dump="mysqldump -u$user -p$pass " #mysgldump备份参数dblist=Scmd -e "show databases;"2>/dev/nul1 sed dlegrep -y "_schema mysql" #获取库名列
echo"需要备份的数据列表:"
echo $dblist
echo"开始备份:"
for db_name in Sdblist #for循环备份库列表
do
printf正在备份数据库:%s’ $db_name了
Sdump Sdb_name 2>/dev/nul1 gzip sfbackfile}/sdb_name_S(date +%m%d).sgl,gz #库名+时间份打包至指定路径下printf,,备份完成\n'
done
echo"全部备份完成!!!"