在做日志分析时或者配置分析时,通常会遇到查找出符合某一条件的行,并统计,主要应用的就是grep、awk、sort、uniq、wc五个命令
1. grep命令
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。
语法格式为:
grep [option] pattern file //pattern 通常可以为正则表达式
常见的参数为:
选项
-a :将 binary 文件以 text 文件的方式搜寻数据
-c :计算找到 '搜寻字符串' 的次数
-i :忽略大小写的不同,所以大小写视为相同
-n :顺便输出行号
-v :反向选择,亦即显示出没有 '搜寻字符串' 内容的那一行!
--color=auto :可以将找到的关键词部分加上颜色的显示喔!
2.awk命令
awk命令通常是将所列出的行,根据条件打印出某一列或几列
常用形式为:awk -F ‘:’ ‘BEGIN {print “name,shell”} {if($1=”root”) print $1”,”$7} END {print “blue,/bin/nosh”}’
3.sort命令
sort排序原则:sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
sort [optional] filename
常用参数:
-u:去除重复行
-r:默认是升序排序,-r是改为降序
-o:将排序结果写入到源文件
-n:默认是通过ASCII码值排序,但是这时会出现10比2小的情况,-n就是说要以数值进行排序
-k和-t:-k是指定以哪一列进行排序,-t是指定分隔符
举例:
(1)sort -n -t “ “ -k 2 -k 3 facebook.txt //人数相同的按照员工平均工资升序排序
(2) sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt //按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序
(3)sort -t ‘ ‘ -k 1.2 facebook.txt //从公司英文名称的第二个字母开始进行排序
(4)sort -t ‘ ‘ -k 1.2,1.2 -k 3,3nr facebook.txt //只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序
4.uniq命令
uniq命令可以去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的。
-i :忽略大小写字符的不同;
-c :进行计数,即统计该行的重复次数
-u :显示不存在的行
-d:显示存在重复的行
5.wc 命令
统计指定文件中的字节数、字数、行数,并将统计结果显示输出。该命令统计指定文件中的字节数、字数、行数。如果没有给出文件名,则从标准输入读取。wc同时也给出所指定文件的总统计数。
- -c 统计字节数。
- -l 统计行数。
- -m 统计字符数。这个标志不能与 -c 标志一起使用。
- -w 统计字数。一个字被定义为由空白、跳格或换行字符分隔的字符串。
- -L 打印最长行的长度。
- -help 显示帮助信息
- –version 显示版本信息
1 | [root@localhost test]# wc test.txt |
- 7 表示行数
- 8 表示单词数
- 70 字节数