美文网首页
深入了解awk

深入了解awk

作者: Linux运维 | 来源:发表于2020-06-11 09:19 被阅读0次

一、awk的基本概述

1.什么是awk
①文体处理工具
②处理数据生成结果报告
③一门编程语言

2.语法格式

#第一种
awk 'BEGIN{处理之前做什么} pattren {commands处理中} END {处理后}' file.txt
awk -F ":" 'BEGIN {print 1/2} /^root/ {print $1} END { print "oldxu-over"}' /etc/passwd

#第二种
cat file.txt | awk '{print $1}'

#第三种,写入到脚本文件中再调用
awk -f awk.sh file.txt

二、awk的内置变量

变量名称 含义
$0 一整行的整体信息,接收文件的每一行
${1 2 3....} 分隔字段后,第1、2、3..列(字段)
FS 在BEGIN中指定以什么分隔符来分隔字段
NF 分隔字段后,总字段数(总列数)
NR 打印行号,NR
RS 指定读入分隔符,默认是以换行符分隔读入(\n)
OFS 指定输出字段分隔符(默认是空格)
ORS 指定输出分隔符,默认是以换行符分隔输出(\n)

注意:FS、RS、OFS、ORS都是在BEGIN中进行定义

1.NF

$NF      代表最后一列
$(NF-1)       代表倒数第二列    

2.NR

awk 'NR==3 {print NR,$0}' file.txt
NR==3    打印第3行
NR>1&&NR<4    打印第2行到第3行

3.分隔字段符(多条件)

"[: ]" 以冒号或空格作为分隔符
"[: ]+" 以多个冒号或空格作为分隔符

三、awk格式化输出printf

1.格式符和修饰符
格式符相当于一个占位符,为后面想要输入的内容就行占位

格式符 含义
%s 打印字符串
%d 打印十进制数(整数)
%f 打印一个浮点数(小数)
%x 打印十六进制数
修饰符 含义
- 左对齐
+ 右对齐

例如:对学生的成绩进行优化展示,并计算平均分

[root@m01 day-07-awk]# cat student.txt 
oldxu       80    90    96    98
oldqiang    93    98    92    91
oldguo      78    76    87    92
oldli       86    89    68    92
oldgao      85    95    75    90

#为了易读和易修改,需要编写脚本
[root@m01 day-07-awk]# cat student.sh
BEGIN{
    #左对齐占10个字符,后面跟想要输入的内容
    printf "%-10s%-10s%-10s%-10s%-10s%-10s\n",
    "Name","Yuwen","Shuxue","Yingyu","Qita","AVG"
}

{
    All=$2+$3+$4+$5
    avg=All/(NF-1)
}

{
    #打印时,左对齐占10个字符
    printf "%-10s%-10d%-10d%-10d%-10d%-10d\n", $1,$2,$3,$4,$5,avg    
}

#进行输出
[root@m01 day-07-awk]# awk -f student.sh student.txt 
Name      Yuwen     Shuxue    Yingyu    Qita      AVG       
oldxu     80        90        96        98        91        
oldqiang  93        98        92        91        93        
oldguo    78        76        87        92        83        
oldli     86        89        68        92        83        
oldgao    85        95        75        90        86  

四、模式匹配

1.正则匹配
2.运算符匹配( <、>、==、~ )

#例如
awk 'BEGIN{FS=":"} $3<10' /etc/passwd
$3<10   第三列的值小于10的行
$NF=="/bin/bash"    最后一列等于/bin/bash的行
$3 ~ /^root/    第三列是以root开头的行
$3 ~ /[0-9]{3,}/    第三列是整数并位数大于3位

3.布尔运算符匹配( ||、&&、! )

#例如
awk 'BEGIN{FS=":"} $3>10 && $4<100' /etc/passwd
awk 'BEGIN{FS=":"} $NF !~ /\/bin\/bash/' /etc/passwd
4.算术运算符匹配( +、-、*、/、% )

相关文章

网友评论

      本文标题:深入了解awk

      本文链接:https://www.haomeiwen.com/subject/vneitktx.html