去年提前批我投了京东、字节和百度,一面,二面都被问到了awk,如果你会,并且还很熟悉,那肯定算是一个加分项了!好感度up up up!
基本原理本篇不再赘述。请阅读: 总结了200篇面经中的awk面试题,看看面试官会问什么!——原理篇 总结了200篇面经中的awk面试题,看看面试官会问什么!——实例篇
可能看完原理篇你还不是太清晰要怎么用,但是看完实例,绝对都能懂了!!
- 重复的实例,代码只写一遍,看的时候举一反三。
- 涉及到的其他命令,在第一次出现时会进行说明。
- 有需要注意的格式、重点等等,在讲到具体实例的时候会附上说明。
本篇讲解——实例篇(2)去重统计排序
log.txt,统计一个文件中"ABCD"出现的次数(grep或awk)
用grep:
grep -o "ABCD" test.txt|wc -l
grep 用于查找字符串,常与| 、cat 、ps 一起使用
grep -o 只打印匹配到的字符,如果一行里面有多个匹配的字符串必须用-o
wc 命令使用-l 统计行数
用awk,(文件内容没有@@@)
awk '{s+=gsub("ABCD","@@@")}END{print s}' log.txt
awk 'BEGIN{RS="111"}END {print --NR}' log.txt
gsub(r,s [,t]) 全局替换,字符串t 中所有与正则表达式r 匹配的项都被替换为字符串s 。函数返回值为替换的数量。如果省略t ,则默认对$0 (全部内容)进行替换。
RS:Record Separator,记录行分隔符;找到某某标志,让每个某某后的内容重新变成一行!!
读入一个文件,文件每行按空格分开字符串,统计字符串a的个数——快手二面
cat test.txt | awk -F" " '{print $0}' |grep -o "a"| wc -l
awk统计日志访问时间——58同城一面。
如test.log如下:
123.125.72.61 - - [05/Dec/2018:00:00:02 +0000] "GET /index?page=1 HTTP/1.1" 200 16739 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 0.120 0.120 .
141.1.142.111 - - [05/Dec/2018:00:00:02 +0000] "GET /index?page=61 HTTP/1.1" 200 16739 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 0.120 0.120 .
123.125.72.61 - - [05/Dec/2018:00:00:03 +0000] "GET /yoyoketang?page=62 HTTP/1.1" 200 16739 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 0.120 0.120 .
141.1.142.131 - - [05/Dec/2018:00:00:03 +0000] "GET /blog?page=3 HTTP/1.1" 200 16739 "-" "Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)" 0.120 0.120 .
awk -F["["," "] '{print $5}' test.log| sort |uniq -c
2 05/Dec/2018:00:00:02
2 05/Dec/2018:00:00:03
Linux uniq 命令用于检查及删除文本文件中重复出现的行列
sort命令和uniq命令配合使用可以去重,先用sort命令排序,然后uniq命令去重:先排序后去重
uniq只能对连续重复行进行去重,所以必须搭配sort命令使用
-c 或--count 在每行行首加上本行在文件中出现的次数
统计当前目录下(包含子目录) java文件的代码总行数——字节电商一面
find ./ -name "*.java"|awk 'END{print NR}'
find命令用于查找文件和目录,-name "*.txt" 表示文件名为.txt结尾的所有文件,* 表示匹配所有
./ 是当前目录
参数代换命令:xargs。xargs表示展开find获得的结果,使其作为awk的参数
NR Number of Record 当前行的编号(行号、从1开始),到目前为止的行数(会按照文件累加)
删除一个文本文件中重复的行,且不改变原文件顺序
awk '!visited[$0]++' filename
维护一个关联数组visited ,对于文件的每一行,如果这行出现的次数为0,则!0=1(True),visited[当前行] 值+1,并打印这行;否则值加1,取反后为False,不打印这行。
++ 优先级比! 高
给了一个10行10列数据,都是以逗号分隔,其中第五列数据可能有重复的,统计第五列不同数据出现次数——上海美团C++一面
类似上述awk统计日志访问时间问题。
awk -F"," '{print $5}' data.txt| sort |uniq -c
Linux uniq 命令用于检查及删除文本文件中重复出现的行列
sort命令和uniq命令配合使用可以去重,先用sort命令排序,然后uniq命令去重:先排序后去重
uniq只能对连续重复行进行去重,所以必须搭配sort命令使用
-c 或--count 在每行行首加上本行在文件中出现的次数
写Linux命令,给定下面的文件,对file和dir按照第二列分别排序,输出最大的那个——字节后端一面
假设test.txt文件内容使用&分隔
file&12
dir&14
file&13
dir&15
cat test.txt | awk -F"&" '$1=="file"{print $1,$2}'|sort -k 2 -r|head -1
cat test.txt | awk -F"&" '$1=="dir"{print $1,$2}'|sort -k 2 -r|head -1
sort 命令可以给文本进行排序,操作的是行。-k 指定列,-r :反向排序(从大到小)
互联网求职&交流 优质资源共享
手里资源比较多,字节、百度、京东、微软、阿里、商汤、携程等,建了个资源共享圈子,有资源的or有需求的
戳下方公众号名片,选择求职-交流群~欢迎大佬们捧场,给予多多资源!
- 用数据报告,洞悉行业前沿。不定期分享行业最新研究报告、学习资料等优质资源
- 机会多多,各种一手内推资源,招聘信息。涵盖校招(春招秋招,提前批)、社招、实习(暑期实习,日常实习)
- 求职经验,面试总结,八股文讲解,技术干货,等资料共享
感谢您的关注,欢迎交流。
|