awk的基本用法
说明:本文只记录相关命令,方便必要时查询,不作为演示教程
1. 分隔文件的行,默认以空格或者Tab进行分割,可以不指定分割符号
# 按空格分割后,输出第1-4个参数
awk '{print $1, $2, $3, $4}' a.log
# 指定分隔符,以下三个命令等价
awk -F, '{print $2, $3}' a.log
awk -F ',' '{print $2, $3}' a.log
awk 'BEGIN{FS=","} {print $2,$3}' a.log
# 多个分隔符,按空格分割完后再用,分隔一次
awk -F '[ ,]' '{print $2,$3}' a.log
# 格式化输出
awk -F ',' '{printf "%-10s %-10s\n", $1, $2}' a.log
2. 设置变量
# 设置a=1, b=2并带入计算,‘$1b’就是直接当成字符拼接在后面了
awk -va=1 -vb=2 '{print $1+a,$1+b,$1b}' a.log
3. for循环及脚本执行
# 按空格分割后,根据分割后的字段个数逐一验证符合长度要求的字段
awk '{for(i=1;i<=NF;i++){if(length($i)<8){print $i}}}' a.log
也可以把命令写入脚本中执行
# 命令太长,用脚本执行
awk -f cal.awk a.log
cal.awk如下:
{
for(i=1;i<=NF;i++)
{
if(length($i)<8)
{
print $i
}
}
}
4. 计算文本某列之和
# 计算所有进程的占用比分比之和
ps aux | awk '{sum+=$4}END{print sum}'
ps aux | awk 'BEGIN{sum=0}{sum+=$4}END{print sum}'
# $6 是实际使用的大小(Kb)
5. BEGIN END用法
BEGIN{}: 读入第一行文本之前执行的语句,一般用来初始化操作
{}: 逐行处理
END{}: 处理完最后一行文本后执行,一般用来处理输出结果
awk 'BEGIN {print "---start deal..."} {print "第"NR"行:";print} END {print "---end"}' a.log
REDHAT
浙公网安备 33010602011771号