【问题标题】:Issue with Ordering array of strings by their int value Bash [closed]按其 int 值 Bash 排序字符串数组的问题 [关闭]
【发布时间】:2021-10-14 03:53:20
【问题描述】:

假设我有一个字符串数组,例如,

_billy_2 _bobby_1 _william_3

我正在尝试按数值降序排列,

我这样做是通过使用类似的东西:

sortNames=($( printf '%s\n' "${names[@]}" | sort -k3 -t'_' -r))

但是,直到我有一个数组,例如:

_billy_115 _bobby_3 _william_4

这将打印出来:

_william_4 _bobby_3 _billy_115

而不是:

_billy_115 _william_4 _bobby_3

有什么想法吗?

【问题讨论】:

  • 将每个字符串放在单独的行上并通过管道传递给sort 命令。
  • 请定义什么是字符串的“int值”。
  • @Bohemian 我认为他的意思是每个字符串的数字后缀
  • 抱歉,我的意思是后缀

标签: arrays bash shell sorting script


【解决方案1】:

使用sed 将每个字符串分隔到新的一行

$ sed 's/[^ ]*/&\n/g' input_file | rev | sort -r | rev | xargs
_william_3 _billy_2 _bobby_1

$ sed 's/[^ ]*/&\n/g' - 这将匹配每个字符串的最后一位,返回匹配并添加新行

rev - 反转以便可以对数字进行排序

sort -r - 反向排序

【讨论】:

  • 谢谢,但我从一个变量中读取,我做了一些进一步的研究,发现现在使用 -k im 进行排序: sortNames=($( printf '%s\n' "$ {names[@]}" | 排序 -k3 -t'_' -r))
猜你喜欢
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2020-04-28
  • 1970-01-01
  • 2021-12-20
  • 2012-01-03
  • 1970-01-01
  • 2016-07-01
相关资源
最近更新 更多