linux 5个文本统计处理常用命令
1 awk
awk 是一种处理文本文件的语言,是一个强大的文本分析工具。
1)打印特定位置字段
如:打印每行的第一个和第四个字段(默认按空格和tab 为分隔):
$ awk '{print $1,$4}' log.txt
2)指定分隔符:-F
默认是tab 和空白分隔每行,如果要指定分隔符,带上-F 参数,比如想通过冒号分隔:
$ awk -F: '{print $1,$4}' log.txt
3)通过BEGIN和END 设定执行前后语句
例子:计算文件夹内文件大小:
$ ls -l *.txt | awk '{sum+=$5} END {print sum}'
2 grep 查找文件里符合条件的字符串
1)打印包含特定字段的行:
$ grep error error.log
2) 打印不包含特定字符的行,带上-v 参数
$ grep -v error error.log // 打印error 里面,不包含error 的行
3 sort 于将文本文件内容加以排序输出
-r 逆向排序
-u 去除重复行
-n 由于默认的方式将文本文件的第一列以ASCII 码的次序排列
遇到数字比较时候,由于1比2小,所以1会出现在2前面,但是10和2 比较也会导致10 在2 前面,使用-n选项,来告诉sort,“要以数值来排序”!
4 uniq 消除重复行
uniq 可检查文本文件中重复出现的行列,但其只是去除相邻的重复行,内容的不相邻,并没有合并,所以多与 sort 命令结合使用
$ cat test.log
123
123
456
123
$ uniq test.log
123
456
123
1)-c 合并在开始输出重复的次数
$ uniq -c test.log
2 123
1 456
1 123
2)-d 仅显示重复出现的行列
3)-u 仅显示出一次的行列
一个综合例子,在某次分享binlog(mysql-bin.001736.sql) 时候,需要找出某表更新信息最频繁的情况,倒序输出。
简化数据等价于如下test.txt文件,出现DataBaseA 的数据的,获取第2列字段统计其出现次数,并且倒叙输出。
$ cat test.txt
DataBaseA abc
DataBaseA abc
DataBaseB ufo
DataBaseA ufo
DataBaseA xyz
DataBaseA abc
DataBaseA xyz
DataBaseB xyz
DataBaseA abc
$ grep "DataBaseA" test.txt | awk '{print $2}' | sort | uniq -c | sort -n -r
4 abc
2 xyz
1 ufo
5 wc 统计行和字符的工具
wc -l file // 统计行
wc -w file // 统计单词数
wc -c file // 统计字符数
wc -m file // 宽字符的统计
-m 和-c 的差别, echo -n “中国” | wc -c 输出为6,echo -n “中国” | wc -m 为2
其他较为常用的有find、xargs、tr、cut、paste、sed;掌握这些命令,可以很方便处理一些日志分析。否则通过 python 代码来实现,得写不少代码,如递归计算某个目录下的所有go 代码:
$ find . -name "*.go" |xargs grep -v "^$"|wc -l
(全文完)
(欢迎转载本站文章,但请注明作者和出处 云域 – Yuccn )