【问题标题】:bash scripting: how to sort a string in the form of "number.text number.text etc" in ascending order?bash脚本:如何以“number.text number.text etc”的形式对字符串进行升序排序?
【发布时间】:2011-12-11 07:58:18
【问题描述】:

例如,如果我们有一个名为“var”的变量

一个字符串“2.test 1.test 9.test”

我希望它是

1.test 2.test 9.test

我正在尝试应用此命令

    echo $var | sort -n

但输出不正确,因为例如我有

2.文本 11.文本

它会打印出来

11.text 2.text 错误,因为 11>2

谢谢

【问题讨论】:

  • 应该可以,它对我有用。您是否尝试过使用-r 颠倒顺序?

标签: string bash sorting scripting


【解决方案1】:

tr 转换换行符中的空格;现在sort;并将换行符转换回空格

echo "2.test 1.test 9.test" | tr " " "\n" |排序 | tr "\n" " "

ps。在论坛某处看到这个

【讨论】:

    【解决方案2】:

    sort 作用于线条,而不是文字。

    对于您向我们展示的示例,您正在对单行文本进行排序。例如:

    $ echo 2.text 11.text 3.text | sort -n
    2.text 11.text 3.text
    

    但这与你向我们展示的输出不一致,所以我不能确定你在做什么,或者你想做什么。

    你在寻找这样的东西吗?

    $ echo 2.text 11.text 3.text | fmt -1
    2.text
    11.text
    3.text
    $ echo 2.text 11.text 3.text | fmt -1 | sort -n
    2.text
    3.text
    11.text
    

    您是否需要将这些行重新组合成一行?通过fmt -999 管道输出可以做到这一点,但这有点难看(GNU coreutils fmt 将宽度限制为 2500)。

    【讨论】:

    • 我认为paste -s 应该在之后重建单行
    • @Daenyth:是的,应该可以。添加-d ' ' 以空格而不是制表符分隔。
    猜你喜欢
    • 2020-09-16
    • 2013-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多