一道Linux面试题
点击上方“背锅侠Tester”蓝色字,关注查阅更多精彩好文
本文来自公众号:python那些事
面试是一个不断学习提升的过程,既是面试官考核面试者,也是面试者学习、考核你未来的上级的过程。不断的面试能够全面的提高自己的去参加大型面试的心理素质;不断练习考题,能够很好的提高自己的能力,提高自己的面试题阅历;更好的取得更多更优的offer;如下是我面试一大型互联网公司的题目:
题目
一种常见的场景,比如说日志文件: 文本1中含有若干行query词,其中query词可能有重复,文本2中也含有若干行query词,query词也有重复。并且重复的query词并不一定相邻。如何快速找到2个文本中相同的query词?
我当时并不熟悉uniq -d可以仅仅显示重复的行这个命令,所以没能用Linux命令快速实现,而仅仅会用Awk脚本来完成。
方法一:Linux命令行
下面给出了Linux命令的一种方法
sort -u A1 >A1.s && sort -u A2 >A2.s && cat A1.s A2.s | sort | uniq -d >duplicate
很简洁,但是算法复杂度为O(nlogn+mlogm),主要时间耗在排序之上。另外,提醒一下大家,uniq之前一定要先sort,因为uniq只对相邻的行来进行处理。
这是百度的一位同学给出的答案,后来跟他交流了一下,他说大数据处理写脚本,无非是cat,sort,uniq。可见这三个命令的重要性,所以大家努力掌握吧。
方法二:Awk脚本
若使用awk,则有
awk 'NR==FNR{A[$1] = $1;} NR >FNR {if ($1 in A)print $0}' A1 A2 >same
算法复杂度为O(m + n),这是因为awk中数组是基于Hash的。NR,表示awk开始执行程序后所读取的数据行数。FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计。所以可以用NR和FNR比较区分两个文件。
你有什么更好的实现方式吗?赶紧在留言区写下你的答案吧。
往期推荐:操作系统面试题集合 ; 面试题二十五期--软件测试工程师必考linux的十道菜 ; 过关斩将-软测常见面试题
本文部分来源网络,如有侵权请第一时间联系删除
看完本文有收获?请转发分享给更多人
+上方微信 入技术、招聘群,做*背锅侠
公众号简介:背锅侠Tester
1.本订阅号专业抓取各大公司面试题,定期推送
2.测试从业者各项知识技术文档推送学习【自动化】【性能】【linux】【数据库】【安全】【python】【git】【面试】【领书】等
3.不定期在测试技术招聘群发送各大公司的招聘需求/推送红包/送书等活动;长按扫描下方二维码进行关注查阅更多精彩好文,领取资料。
The birth of life is a pleasant surprise.Life is you.
生命是惊喜,生活是你点赞与分享是中华人民传统美德
Date:2018-1-21
点击【好看】,分享给更多朋友:)
上一篇: 一道Python面试题