awk文本处理工具
awk 格式化输出,报告生成器
**格式: awk 选项 ‘程序{动作}’ 文件
选项:
-F“” 指定分隔符 “[[:space:]]+|:” 多个分隔符
-v 变量赋值
内置变量:
OFS:输出字段分隔符(列) OFS=':'
RS:输入行分隔符
ORS:输出行分隔符
NF:字段数量(列) \$(NF-1)即倒数第二字段
NR:记录数量(行) NR==4 即第四行
自定义变量 -v f=2
引用外部变量 '$name'
程序:
BEFIN:处理之前
END:处理之后
模式/ / 正则表达式 行范围/ /,/ /
字段:
即列,需要定义分隔符 $1为第一列 $0为所有列
动作:
print 打印,相当于echo
printf 格式化输出
printf:
必须指定分隔符,不会自动,需\n才会换行
一个格式符对应一个参数$1
格式符: %d取数字整数
%s取字符串 %-15s即左对齐15字符 默认右对齐
比较操作符:
==等于 !=不等于 >大于 <小于
逻辑操作符:
与&& 或|| 非!
流程控制:
'{if($3>100)print $3}'
'$3>100 && $3<1000{print $3}'
函数:
sub()查找替换 替换一个
'{sub(/:/,"-",$0)print $0}'
gsub()全部替换
cat /etc/passwd |awk -F":" 'gsub(/:/,"-",$0){print $0}'
system() 调用shell函数****
cat /etc/passwd| awk -F: '{print}' 默认全部字段,即列
cat /etc/passwd| awk -F: '{print $1,$3}' 以:为分隔符取1,3列
cat /etc/passwd| awk -F: '{print $1"\t"$3}' 以:为分隔符取1,3列并且以tab建隔开
df | awk -F"[[:space:]]+|%" '/^\/dev\/sd/{print $5}' 取分区利用率
cat /etc/Passwd| awk -F":" -v OFS=" " '/\<0\>/,/\<50\>/{print $1,$NF}'以:为分隔符取0-50uid用户的shell并以空格隔开
取文件权限码
stat /tmp |awk -F"(" 'NR==4{printf "%d\n",$2}'
统计/etc/fstab文件中每个文件系统类型出现的次数
cat /etc/fstab |awk -F" " '/^UUID/{print $3}'|sort|uniq -c
统计/etc/fstab文件中每个单词出现的次数
cat /etc/fstab |grep -o '\<[a-z]\+\>'|sort |uniq -c |sort -nr
提取出字符串Yd$C@M05MB%9&Bdh7dq+YVixp3vpw中的所有数字
echo "Yd$C@M05MB%9&Bdh7dq+YVixp3vpw" |grep -o [0-9]|xargs