linux 5个文本统计处理常用命令

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

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注