Linux下sort命令

前言

排序是大家写代码最长遇见的问题,稍微有基础的在短时间内都能写出快排,归并,插入,堆排等各种排序算法,但是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的奇技淫巧还是很方便的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值