shell排序,强大的sort与awk

  “排序”在任何一门语言中都是最基础的功能,常见的排序对象有“文件”和“数组”,排序模式可以按照单列排序,也可以多列组合排序,排序方式有升序、降序,排序的算法就更多了,常见的有字典顺序、数组大小比较等。下文将从“排序对象”、“排序模式”、“排序方式”、“排序的算法”5个方面,逐一来分析shell是如何实现的。

一.使用sort分别对文件和数组进行排序

1.使用sort [文件名]就可以对文件以行为单位进行排序
注意:sort排序后并不会改变原文件,而是将排序结果输出到了“标准输出”,你可以使用sort -o [输出文件名] [文件名]sort [文件名] > [输出文件名]将排序结果存到指定文件

$cat test
aa
cc
bb

$sort test
aa
bb
cc

注意:sort排序后并不会改变原文件,而是将排序结果输出到了“标准输出”,你可以使用sort -o [输出文件名] [文件名]sort [文件名] > [输出文件名]将排序结果存到指定文件

2.使用sort命令对数组进行排序要稍微麻烦一点,因为sort命令默认的排序对象是文本文件,并且是以行为单位进行排序,所以在排序之前,需要先将数组转化为以行为单位的输入流,然后通过管道命令传递到sort

sort_arr.sh

#!/bin/sh
arr=(aa cc bb)
echo ${arr[@]} | tr ' ' '\n' | sort -o sort_result
cat sort_result
$./sort_arr.sh
aa
bb
cc

二.指定列排序

1.列分隔符

  指定列排序的前提是将每一行分为多列,sort默认的列分隔符为空格,如果需要自定义列分割符,需要使用sort -t '列分隔符'

(1)默认分隔符
$cat test_multi_column_empty
1 b
3 a
2 c

# 根据第二列排序
$sort -k 2 test_multi_column_empty
3 a
1 b
2 c
(2)自定义分隔符
$cat test_multi_column_comma
1,b
3,a
2,c

# 根据第二列排序
$sort -t ',' -k 2 test_multi_column_empty
3,a
1,b
2,c
2.指定列排序

  sort默认是按照第一列进行排序,如果需要指定列排序,需要使用sort -k 列1[修饰符] -k 列2[修饰符]

1.根据第2列升序,第3列降序
$cat test_goods
g1,400,2000
g3,300,1000
g2,200,3000
g4,200,5000
g5,200,1000

$sort -t ',' -k2,2 -k3r test_goods
g4,200,5000
g2,200,3000
g5,200,1000
g3,300,1000
g1,400,2000

-k参数详细的语法如下:
列1.字符1[修饰符],列2.字符2[修饰符]

三.升序与降序

sort默认是按升序排序,如果需要降序排序,可以使用sort -r

$sort -r test
cc
bb
aa

四.按数值大小排序 & 按字符排序

   sort默认使用字符串排序。字符串排序算法为:从首字符向后,依次按 ASCII 码值进行比较,最后将它们按升序输出。同时,提供了下面几个选项来修改排序算法。

  • -n:以数值型进行排序
  • -f:将小写字母视为大写字母
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值