Shell中数组中元素排序的技巧

要将old=(4 7 1 101)里面的元素,按自然数的顺序排序,生成新的数组new=(1 4 7 101)。如果要遍历元素,借助中间变量一个个比较的方式可能比较繁琐,这里有两种比较简单达到数组重新排序。 

方法一: 借助于tr和sort命令

[root@localhost ~]# old=(4 7 1 101)
[root@localhost ~]# new=$(cat ${old[@]} | tr ' ' '\n' | sort -n)
1 4 7 101

备注: 数组中分隔符是空格,借助于tr将空格替换成换行符,再用sort命令的-n可以按自然数排序,便可达到目的。

方法二: 借助于Python命令行方式

 

[root@localhost ~]# old=(4 7 1 101)
[root@localhost ~]# new=$(echo ${old[@]} | python -c "print ' '.join(sorted(raw_input().split(' '), key=lambda x:int(x)))")

备注: 借助于python -c的命令行方式来出来,echo中的内容通过管道传过来,再用raw_input()接收,接下来就是用sort结合lambda的key来排序,排完序再用' '.join()来拼接,处理好再赋值给新数组new。

上面两种方法处理起来还是很有技巧。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Shell,你可以使用数组来存储和管理多个值。以下是一些常见的Shell数组用法: 1. 声明数组:可以使用`array_name=(value1 value2 value3 ...)`来声明一个数组,其`array_name`是数组的名称,`value1`、`value2`、`value3`等是数组的值。例如:`fruits=("apple" "banana" "orange")` 2. 访问数组元素:可以使用`${array_name[index]}`来访问数组中的特定元素,其`array_name`是数组的名称,`index`是元素的索引(从0开始)。例如:`${fruits[0]}`将返回数组`fruits`的第一个元素"apple"。 3. 获取数组长度:可以使用`${#array_name[@]}`来获取数组的长度。例如:`${#fruits[@]}`将返回数组`fruits`元素的个数。 4. 遍历数组:可以使用`for`循环来遍历数组中的所有元素。例如: ``` fruits=("apple" "banana" "orange") for fruit in "${fruits[@]}" do echo $fruit done ``` 上述代码将逐个输出数组`fruits`的所有元素。 5. 添加元素:可以使用`${array_name[@]}=value`来向数组末尾添加新元素。例如:`fruits+=("grape")`将向数组`fruits`末尾添加一个新元素"grape"。 6. 删除元素:可以使用`unset array_name[index]`来删除数组中的特定元素。例如:`unset fruits[1]`将删除数组`fruits`的第二个元素。 7. 切片数组:可以使用`${array_name[@]:start_index:length}`来获取数组中指定范围的元素子集。例如:`${fruits[@]:1:2}`将返回数组`fruits`从第二个元素开始的两个元素。 以上是一些常见的Shell数组用法,希望能对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值