去年提前批我投了京东、字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up!
基本原理本篇不再赘述。请阅读:
总结了200篇面经中的awk面试题,看看面试官会问什么!——原理篇
总结了200篇面经中的awk面试题,看看面试官会问什么!——实例篇
可能看完原理篇你还不是太清晰要怎么用,但是看完实例,绝对都能懂了!!
- 重复的实例,代码只写一遍,看的时候举一反三。
- 涉及到的其他命令,在第一次出现时会进行说明。
- 有需要注意的格式、重点等等,在讲到具体实例的时候会附上说明。
本篇讲解——实例篇(1)文本处理
- awk获取每个以C和E开头的名字——腾讯业务一面
- 文件格式A, B, C, D 四列,用awk取出C列——小米go实习生一面
- awk,输出最后一列——美团运维开发二面
- 用awk,求test.txt第二列的平均值——百度暑期实习C++研发一面
- 写一个awk 打印出第10行——蚂蚁金服SRE社招一面
- ls -l 如何显示特定列——金山云 云原生后台面经
- 在Linux系统中查看正在通过ssh登陆的用户和终端——百度
- awk提端口——贝壳机器学习数据挖掘工程师二面
- linux求文件中数字的最大的一行,输出行号——腾讯后端一面
- 接下题,先看拓展:awk,找出在A文件里也在B文件里的那些数字
- 两个文本文件,里面每一行都是一个整数,求在A文件里但不在B文件里的那些数字——腾讯CDG C++后台开发暑期实习三面
- 接上题,拓展:awk,找出不在A文件里但在B文件里的那些数字
- linux基础:awk实现left join——滴滴定价策略
- 接上题,拓展:awk实现inner join
- 接上题,拓展:awk实现right join
- 用sed和awk实现把一个文件中的空行进行删除——米哈游大数据视频一面
- 当每行第一个元素是FIND,获取第二个元素
- 互联网求职&交流 优质资源共享
假设test.txt文件内容使用制表符分隔
#name class score id Christian 2 96 2003073 Susan 3 91 2003074 Nancy 4 92 2003075 Elizabeth 5 95 2003076 Tom 6 96 2003077
awk -F"t" '{print $1}' test.txt | awk '/^[CE]/'
文件格式A, B, C, D 四列,用awk取出C列——小米go实习生一面上面这个正则表达式中^用在([ ]之外)就是限定开头的意思,[]表示匹配[ ]中列举的字符
假设test.txt文件内容使用制表符分隔
awk -F"t" '{print $3}' test.txt
awk,输出最后一列——美团运维开发二面
假设test.txt文件内容使用制表符分隔
awk -F"t" '{print $NF}' test.txt
用awk,求test.txt第二列的平均值——百度暑期实习C++研发一面
awk '{sum+=$2}END{print "Average=", sum/NR}' test.txt
写一个awk 打印出第10行——蚂蚁金服SRE社招一面
cat text.txt |awk 'NR==10'
ls -l 如何显示特定列——金山云 云原生后台面经这里就是原理讲解中,省略的用法。省略了{action},只有pattern。
ls -l | awk '{print $3}' #第三列
在Linux系统中查看正在通过ssh登陆的用户和终端——百度linux中ls -l命令以长格式显示目录下的内容列表
who|awk '{print $1,$2}'
awk提端口——贝壳机器学习数据挖掘工程师二面
netstat -tunlp | awk -F" "+ '{print $4}'|awk -F:+ '{print $NF}'
linux求文件中数字的最大的一行,输出行号——腾讯后端一面netstat -tunlp用于显示 tcp,udp 的端口和进程等相关情况。
-t (tcp) 仅显示tcp相关选项
-u(udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
test.txt:
13 aaa 16 bbb 18 aaa 1 ccc
cat test.txt | awk 'BEGIN{max=0;tmp=0} {if(max<$1){max=$1;tmp=NR}} END{print tmp}'
#输出为: 3
接下题,先看拓展:awk,找出在A文件里也在B文件里的那些数字
A.txt 12 34 11 77 34 12 B.txt 86 73 12 11 73 86
sort -nu A.txt > A_temp.txt
sort -nu B.txt > B_temp.txt
awk 'NR==FNR{map[$1]=$2} NR>FNR{if($1 in map){print $0}}' A_temp.txt B_temp.txt > result.txt
两个文本文件,里面每一行都是一个整数,求在A文件里但不在B文件里的那些数字——腾讯CDG C++后台开发暑期实习三面sort命令可以给文本进行排序,操作的是行。-n依照数值的大小排序,-u意味着唯一(unique),输出的结果是去重了的
NR Number of Record 当前行的编号(行号、从1开始),到目前为止的行数(会按照文件累加)
FNR File Number of Record 当前文件中的行号
读入多个文件时,awk按顺序读入每一行,读完第一个文件才会读第二个文件
当NR==FNR时,说明正在读A_temp.txt,新建数组map,索引为A_temp.txt文件的每一个整数,$2是空值
当NR>FNR时,说明正在读B_temp.txt,if(索引 in 数组)判断$1是否在数组a的索引里,如果在则输出,说明是共有数字。
> result.txt输出到文件result.txt
sort -nu A.txt > A_temp.txt
sort -nu B.txt > B_temp.txt
awk 'NR==FNR{map[$1]=$2} NR>FNR{if(!($1 in map)){print $0}}' B_temp.txt A_temp.txt > result.txt
接上题,拓展:awk,找出不在A文件里但在B文件里的那些数字求在A文件里但不在B文件里,需要先读B_temp.txt文件
当NR==FNR时,说明正在读B_temp.txt,新建数组map,索引为B_temp.txt文件的每一个整数,$2是空值
当NR>FNR时,说明正在读A_temp.txt,if(!(索引 in 数组))判断$1是否在数组map的索引里,如果不在则输出,说明是B没有A有的数字
sort -nu A.txt > A_temp.txt
sort -nu B.txt > B_temp.txt
awk 'NR==FNR{map[$1]=$2} NR>FNR{if(!($1 in map)){print $0}}' A_temp.txt B_temp.txt > result.txt
linux基础:awk实现left join——滴滴定价策略不在A文件里但在B文件里,需要先读A_temp.txt文件
left join左连接(数据库概念):输出“左”表所有的行,再输出“右”表与“左”表匹配的行,不匹配则置为null。
a.txt (每列均以空格分隔) 103 stellar 89 114 gary 90 125 peter 87 b.txt 103 F 104 M 113 M 125 M
awk 'NR==FNR{map[$1]=$0} NR!=FNR{print $0, map[$1]}' b.txt a.txt > result.txt
接上题,拓展:awk实现inner join注意,用awk实现左连接,需要先读右表b.txt,再读左表a.txt
当NR==FNR时,说明正在读b.txt,新建数组map,索引为b.txt文件的key($1),$0是a表全部信息,后面要输出
当NR!=FNR或写成NR>FNR时,说明正在读a.txt,按行输出时先输出全部a表信息$0,再按此时a表的key($1),输出b表里匹配的值map[$1]
inner join内连接(数据库概念):查询的是两张表的并集,也就是“左”表和“右”表都必须有数据才能查询出来。
a.txt (每列均以空格分隔) 103 stellar 89 114 gary 90 125 peter 87 b.txt 103 F 104 M 113 M 125 M
awk 'NR==FNR{map[$1]=$0} NR!=FNR{if ($1 in map){print map[$1],$0}}' a.txt b.txt > result.txt
接上题,拓展:awk实现right join
right join右连接(数据库概念):输出“左”表与“右”表匹配的行,不匹配则置为null,再输出“右”表所有的行。
a.txt (每列均以空格分隔) 103 stellar 89 114 gary 90 125 peter 87 b.txt 103 F 104 M 113 M 125 M
awk 'NR==FNR{map[$1]=$0} NR!=FNR{print map[$1],$0}' a.txt b.txt > result.txt
用sed和awk实现把一个文件中的空行进行删除——米哈游大数据视频一面注意,用awk实现右连接,需要先读左表a.txt,再读右表b.txt
当NR==FNR时,说明正在读a.txt,新建数组map,索引为a.txt文件的key($1),$0是a表全部信息,后面要输出
当NR!=FNR或写成NR>FNR时,说明正在读b.txt,按行输出时先按此时b表的key($1),输出a表里匹配的值map[$1],再输出b表全部信息$0
用awk:
cat file.txt|awk NF > new.txt
在 AWK 中,内置变量NF,Number of Field,表示当前行的字段个数(当前行的列数)
当一行为非空行时,NF的值为正值,当一行为空行时,NF的值为0
用sed:
cat file.txt|sed '/^$/d' > new.txt
sed类似awk操作方式,对记录(行)进行操作,是从文件或管道中读取一行,处理一行,输出一行
d在sed命令中,是删除
当每行第一个元素是FIND,获取第二个元素/是正则表达式分界符,两个/里面的内容是正则表达式
在正则表达式中^表示限定开头,以哪个字符作为开始;$表示限定结尾,以哪个字符为末尾进行匹
当^和$同时出现,表示只能匹配^和$之间的内容,例如/^aaa$/只能匹配’aaa’
cat test.txt | awk '{if($1=="FIND"){print $2}}'
互联网求职&交流 优质资源共享要注意格式!!非常重要!!
IF条件判断句两边用大括号括起来'{if(条件判断){action}}'
手里资源比较多,字节、百度、京东、微软、阿里、商汤、携程等,建了个资源共享圈子,有资源的or有需求的
戳下方公众号名片,选择求职-交流群~欢迎大佬们捧场,给予多多资源!
- 用数据报告,洞悉行业前沿。不定期分享行业最新研究报告、学习资料等优质资源
- 机会多多,各种一手内推资源,招聘信息。涵盖校招(春招秋招,提前批)、社招、实习(暑期实习,日常实习)
- 求职经验,面试总结,八股文讲解,技术干货,等资料共享
感谢您的关注,欢迎交流。



