栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(1)文本处理

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux-京东字节百度提前批,一面二面都被问到了awk——实例篇(1)文本处理

去年提前批我投了京东、字节和百度,一面,二面都被问到了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,获取第二个元素
    • 互联网求职&交流 优质资源共享

awk获取每个以C和E开头的名字——腾讯业务一面

假设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'

这里就是原理讲解中,省略的用法。省略了{action},只有pattern。

ls -l 如何显示特定列——金山云 云原生后台面经
ls -l | awk '{print $3}' #第三列

linux中ls -l命令以长格式显示目录下的内容列表

在Linux系统中查看正在通过ssh登陆的用户和终端——百度
who|awk '{print $1,$2}'
awk提端口——贝壳机器学习数据挖掘工程师二面
netstat -tunlp | awk -F" "+ '{print $4}'|awk -F:+ '{print $NF}'

netstat -tunlp用于显示 tcp,udp 的端口和进程等相关情况。

-t (tcp) 仅显示tcp相关选项

-u(udp)仅显示udp相关选项

-n 拒绝显示别名,能显示数字的全部转化为数字

-l 仅列出在Listen(监听)的服务状态

-p 显示建立相关链接的程序名

linux求文件中数字的最大的一行,输出行号——腾讯后端一面

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

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

两个文本文件,里面每一行都是一个整数,求在A文件里但不在B文件里的那些数字——腾讯CDG C++后台开发暑期实习三面
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

求在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有的数字

接上题,拓展:awk,找出不在A文件里但在B文件里的那些数字
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文件里,需要先读A_temp.txt文件

linux基础:awk实现left join——滴滴定价策略

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实现左连接,需要先读右表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]

接上题,拓展:awk实现inner join

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

注意,用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

用sed和awk实现把一个文件中的空行进行删除——米哈游大数据视频一面

用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命令中,是删除

/是正则表达式分界符,两个/里面的内容是正则表达式

在正则表达式中^表示限定开头,以哪个字符作为开始;$表示限定结尾,以哪个字符为末尾进行匹

当^和$同时出现,表示只能匹配^和$之间的内容,例如/^aaa$/只能匹配’aaa’

当每行第一个元素是FIND,获取第二个元素
cat test.txt | awk '{if($1=="FIND"){print $2}}'

要注意格式!!非常重要!!

IF条件判断句两边用大括号括起来'{if(条件判断){action}}'

互联网求职&交流 优质资源共享

手里资源比较多,字节、百度、京东、微软、阿里、商汤、携程等,建了个资源共享圈子,有资源的or有需求的

戳下方公众号名片,选择求职-交流群~欢迎大佬们捧场,给予多多资源!

  • 用数据报告,洞悉行业前沿。不定期分享行业最新研究报告、学习资料等优质资源
  • 机会多多,各种一手内推资源,招聘信息。涵盖校招(春招秋招,提前批)、社招、实习(暑期实习,日常实习)
  • 求职经验,面试总结,八股文讲解,技术干货,等资料共享

感谢您的关注,欢迎交流。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/882432.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号