前言
排序是大家写代码最长遇见的问题,稍微有基础的在短时间内都能写出快排,归并,插入,堆排等各种排序算法,但是linux平时操作,让你分析日志,你不可能对在shell脚本里现写一个排序算法,这时awk+sort的作用就体现出来了,用awk主要是获取所需的字段(ps:这里不做详细解释),然后管道给sort进行排序
材料
创建示例文件的脚本:
#!/bin/bash fruits=(a b c d e f g h i j k l m n o p q i s t u v w x y z) arrlen=${#fruits[*]} len=5 file="/home/wzy/test/sort.txt" for i in `seq 1 50` do ip=192.168.1.$i name="" for ((j=0;j<$len;j++)) do offset=`expr $RANDOM % $arrlen` name=$name${fruits[$offset]} done str=$i" "$ip" "$name echo $str >> $file done
示例文件截图:
sort使用
sort的基本工作原理:
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,也就是c中的strcmp函数,最后将他们升序输出
sort的-u(--unique)选项
它的作用很简单,就是在输出行中去除重复行
sort的-r(--reverse)选项
sort默认的排序方式是升序,如果想改成降序,加上-r选项即可
sort的-n(--numberic-sort)选项
默认情况下,如果按照strcpy排序,会出现10小于2的情况,懂strcpy比较机制也就不需要我多解释了,不懂的自己去google吧,例如当我们按照第一个字段来排序时,会出现如下情况:
如果我们想就是按照数字大小进行排序,则需要告诉sort,因此需要-n参数
sort的-t(--field-separator)选项和-k(--key)选项
刚才对于sort.txt处理,我们是用awk来获取所需字段,其实sort本身提供了这个功能,用-t参数来指定字段分隔符,用-k指定第几个字段,但是我更喜欢awk,因为awk更方便做一些预处理工作
后记
工作中掌握一点linux的奇技淫巧还是很方便的!
作者:zinss26914 发表于2013-8-27 18:51:32 原文链接
阅读:16 评论:0 查看评论