今天对awk、uniq、sort三个命令做了基础功能的学习,这里自己记录一下:

1.awk(数据处理工具,将一行分割成多个“字段”来处理)

    awk -F '文本切割符'‘{处理过程}’ 文件名称

如:cat /ect/passwd | awk -F ':' '{print $1}'   #以:分割,打印第一列的数据;如果为$0表示整个文件内容

       cat /etc/passwd | awk -F ''BEGIN {print "begin,goto"} {print $1","$7} END {print “end,end”}  #以空白符作为分割,打印begin,goto开始执行信息,打印1,7行,以end,end结束


2.uniq 命令用来过滤重复部分显示文件内容,这个命令读取输入文件,并比较相邻的行

参数:

-c  显示输出中,在每行行首加上本行在文件中出现的次数

-d  只显示重复行

-u  只显示文件中不重复的各行

-n  前n个字段与每个字段前的空白一起被忽略

+n 前n个字符被忽略,之前的字符被跳过(字符从0开始编号)

-f   n与-n相同,这里n是字段数

-s   n与+n相同,这里n是字符数

常用: uniq -c  首行显示文件中出现的次数

3.sort 排序

参数:

-u  在输出行中去除重复行

-r   默认的排序方式为升序,-r转换为降序排列

-n  默认按照字符来排序出现10在2前面,-n以数值来排序

-t   后面设定间隔符

-k  指定列数

如:sort -n -k 2 -t : test.txt  以数值排序,按照第二列以“:”间隔来排列顺序


以上简单总结而已,后续如有其他使用,再更新!!!


日常使用相关:

1.截取日志中特定时间段的日志内容

sed -n '/2016-08-25 09:44:10/,/2016-08-25 09:44:30/p'  1.txt > test.txt


2.nginx 访问日志统计访问的url

  • 截取特定时间段的日志

cat nginx.acc.log | egrep "12/Aug/2016" | sed -n '/14:59:44/,/15:47:23/p' > a.txt

  • 排序

cat a.txt |awk -F '+0800' '{print $2}'| awk -F ' ' '{print $5}' | sort #对数据进行(ASCII)排序

  • 去重,uniq -c 只会合并相邻的记录,所以在使用它之前,应该先进行排序

cat a.txt |awk -F '+0800' '{print $2}'| awk -F ' ' '{print $5}' | sort | uniq -c

  • 再排序,得到 (次数  内容)的文件, sort -k 1 -n -r 指定对第一行进行排序,-n 数字排序,以降序排列

cat a.txt |awk -F '+0800' '{print $2}'| awk -F ' ' '{print $5}' | sort | uniq -c | sort -k 1 -n -r


> ls -alt # 按修改时间排序

> ls --sort=time -la # 等价于> ls -alt

> ls -alc # 按创建时间排序

> ls -alu # 按访问时间排序

 

# 以上均可使用-r实现逆序排序

> ls -alrt # 按修改时间排序

> ls --sort=time -lra # 等价于> ls -alrt

> ls -alrc # 按创建时间排序

> ls -alru # 按访问时间排序



不管你是根据什么排序,加上 -r 就会反序