awk -f 分隔符 命令_干货 |名企高频考点之Linux 什么命令能够进行文本列级别切分...

本文介绍了Linux中的AWK命令,详细讲解了其基本使用规则、数据过滤、按指定字符分割数据、条件执行BEGIN和END、匹配包含特定字符串的行以及数据统计处理等功能。通过实例演示了AWK的强大之处。
摘要由CSDN通过智能技术生成
54de125d41273a0dfc040f4e8f13faf6.png

点击蓝字关注我哦

85f11b452d699f894d5e784db05ba202.png 以下是本期干货视频 视频后还附有文字版本哦 1b2c7f80450ca396f46c7ab11f3581ac.png ff57240047afd54e3520f8afa737f1b8.png

▼《名企高频考点之-Linux 什么命令能够进行文本列级别切分》▼

ps:请在WiFi环境下打开,如果有钱任性请随意

6cb327718628c8cdf3882f5c876e0dea.png

0. 概述

2d11d5d4e96e48fc9a036d732f92714d.gif

AWK是一种样式扫描与处理的工具,其功能与 sed 和 grep 命令类似,却又远远强大于它们。

AWK不仅支持数据的扫描以及样式过滤,同时它还包含样式装入、流控制、数学运算符、进程控制语句甚至于内置变量和函数,几乎具备了一门完整编程语言的精美特性,因此,AWK 创始者们将其定义为样式、扫描、处理语言。 在我们面试各大公司的时候,关于Linux往往最容易被问到的问题之一就是Linux指令,而其中,使用AWK命令对数据进行扫描、过滤、处理,又是相对比较容易被问到的。因此我们结合海量面经,提取出了几个最容易被问到的AWK相关功能以及基本使用方法,供大家参考。
  • 如何对数据进行过滤,匹配指定行的数据

  • 如何将数据按照指定字符分割,并取出指定列的数据

  • 如何对随机进行统计分析输出

6cb327718628c8cdf3882f5c876e0dea.png

1. Linux命令之AWK

2d11d5d4e96e48fc9a036d732f92714d.gif
1.1 AWK基本使用规则
规则:
awk [选项] '条件1{动作 1} 条件2{动作 2} …' 文件名

选项:

-F  #指定分隔符,可省略(默认空格或Tab位)-V  #调用外部Shell变量  variabl

条件:一般使用关系表达式作为条件。这些关系表达式非常多, 参考下表:

条件类型条 件说 明
awk保留字BEGIN在 awk 程序一开始,尚未读取任何数据之前执行。BEGIN 后的动作只在程序开始时执行一次
awk保留字END在 awk 程序处理完所有数据,即将结束时执行;END 后的动作只在程序结束时执行一次
关系运算符>大于
关系运算符<小于
关系运算符>=大于等于
关系运算符<=小于等于
关系运算符==等于,用于判断两个值是否相等。如果是给变童赋值,则使用"=”
关系运算符!=不等于
关系运算符A~B判断字符串 A 中是否包含能匹配 B 表达式的子字符串
关系运算符A!~B判断字符串 A 中是否不包含能匹配 B 表达式的子字符串
正则表达式/正则/如果在“//”中可以写入字符,则也可以支持正则表达式
内置变量:
变量用途示例
FS保存或设置字段分隔符,如FS=”:”
$n指定数据内容第n列数据awk -F ':'  '{print "用户名:"$1}' /etc/passwd
$0当前读入的整行文本内容
NF记录当前处理行的字段个数(列数)awk '{print NF}' a.txt
NR记录当前已读入行的数量(行数)awk '{print NR}' a.txt
FNR当前行在源文件中的行号awk '{print “第”FNR”行”,“有“NF”列”}' a.txt
6cb327718628c8cdf3882f5c876e0dea.png

2. AWK常用选项及条件使用示例

2d11d5d4e96e48fc9a036d732f92714d.gif
2.1 数据内容:
[san@San doc]$ cat awk.txt张三:87:66:55李四:85:76:60王五:91:53:97
2.2 AWK命令之对数据进行过滤,匹配指定行的数据:
[san@San doc]$ awk -F ':' 'NR==2 {print}' awk.txt李四:85:76:60[san@San doc]$ awk -F ':' 'NR==1, NR==3 {print}' awk.txt张三:87:66:55李四:85:76:60王五:91:53:97
注意:

示例 awk -F ':' awk.txt  中选项指定了文本数据内容中列与列之间的分隔符为 :" ; " 。

示例 awk 'NR==2 {print}' awk.txt 中,NR==2为条件判断,匹配第二行数据;{print}为执行动作,表示进行打印。 示例 NR==1, NR==3 中,匹配并非第2行以及第3行,其功能应为从第1行至第3行。
2.3 AWK命令之对数据进行过滤,匹配指定列的数据:
[san@San doc]$ awk -F ':' 'NF==1 {print}' awk.txt[san@San doc]$[san@San doc]$ awk -F ':' 'NR==1,NF=1 {print}' awk.txt张三[san@San doc]$ awk -F ':' 'NR==1,NF=2 {print}' awk.txt张三 87[san@San doc]$ awk -F ':' '{printf $2 "\n"}' awk.txt878591

注意:

示例中 NF 表示指定行字段列的个数,并非指定某一列字段。因此,随着 NF 字段的变化,打印出的列的个数也不同。 若要获取某一列的数据,则需要在条件动作中进行指定 $n 来获取,使用 printf 进行打印。
2.4 AWK 命令之条件执行 BEGIN 和 END
[san@San doc]$ awk -F ':' 'BEGIN{printf "姓名\t语文\t数学\t英语\n"}> NR==1, NR==3 {print $1"\t"$2"\t"$3"\t"$4"\n"}> END{printf "这是大家的成绩单...\n"}' awk.txt姓名语文数学英语张三876655李四857660王五915397这是大家的成绩单...[san@San doc]$ awk -F ':' 'BEGIN{printf "姓名\t语文\t数学\t英语\n"}; NR==1, NR==3 {print $1"\t"$2"\t"$3"\t"$4"\n"}; END{printf "这是大家的成绩单...\n"}' awk.txt姓名语文数学英语张三876655李四857660王五915397这是大家的成绩单...
注意: 示例中, 多个条件及对应动作可以以空格或者分号进行间隔,追求阅读性则可以使用换行。 示例中,BEGIN{printf "姓名\t语文\t数学\t英语\n"} 表示AWK在处理初始阶段先完成打印标题动作。 示例中,END{printf "这是大家的成绩单...\n"} 表示AWK在处理完毕后结束时完成打印动作。
2.5 AWK 命令之匹配包含指定字符串的行
[san@San doc]$ awk -F ':' '/6/{print}' awk.txt张三:87:66:55李四:85:76:60[san@San doc]$ awk -F ':' '/7$/{print}' awk.txt王五:91:53:97[san@San doc]$ awk -F ':' '/^李/{print}' awk.txt李四:85:76:60

注意:

示例中,  /6/ 为正则表达式条件匹配 , 匹配包含有6字符的行。 示例中,/7$/   为正则表达式条件匹配 ,匹配以7字符结尾的行。 示例中,/^李/ 为正则表达式条件匹配 ,匹配以李字符开始的行。 更多字符串匹配用法,可以调研参见正则表达式的使用规则;
2.6 AWK 命令之对数据进行统计处理:
[san@San doc]$ awk -F ':' 'BEGIN{printf "姓名\t语文\t数学\t英语\t总分\n"}{printf "%s\t%d\t%d\t%d\t%d\n", $1, $2, $3, $4, $2+$3+$4}END{printf "成绩统计结束\n"}' awk.txt姓名语文数学英语总分张三876655208李四857660221王五915397241成绩统计结束[san@San doc]$ awk -F ':' '{if($2>=60 && $3 >= 60 && $4 >=60){total=$2+$3+$4; printf "%s好样的,全 科通过,总分:%d\n",$1, total}}' awk.txt李四好样的,全科通过,总分:221

注意:

从示例中,可以看出在 awk 的执行动作中,printf 也可以像C语言一样进行字符串的格式化输出,并且支持数据运算以及类C语言风格的流程控制语句。 6cb327718628c8cdf3882f5c876e0dea.png

3. 总结

2d11d5d4e96e48fc9a036d732f92714d.gif
  • AWK命令之常用高频选项

  • AWK之常见条件判断

  • AWK命令之内置变量

  • AWK命令之常见执行动作

    2feb58458511b11557a8db4229e766d4.png

好了,如上就是我们在面试中被问到,关于在Linux系统中如何使用AWK命令对数据进行过滤统计处理方面,面试时,老铁们回答的参考喽!大家下来可以自行练习哦。 作者:张文超 审核:王海斌 编辑:乐仔的崽

606fa1567b2355b56d2204cc32212703.png

好看,就要点个"在看"

8e6ff1ac899e24f203fbc9cda89e6937.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值