How to sort strings that contain a common prefix and suffix numerically from Bash?

前端 未结 4 1681
旧时难觅i
旧时难觅i 2020-11-30 07:33

Here is a list of files:

some.string_100_with_numbers.in-it.txt
some.string_101_with_numbers.in-it.txt
some.string_102_with_numbers.in-it.txt
some.string_23_         


        
相关标签:
4条回答
  • 2020-11-30 07:47

    Try the following:

    sort -t '_' -k 2n
    
    • -t '_' (sets the delimiter to the underscore character)
    • -k 2n (sorts by the second column using numeric ordering)

    DEMO.

    0 讨论(0)
  • 2020-11-30 07:59

    Use ls -lv

    From the man page:

    -v     natural sort of (version) numbers within text
    
    0 讨论(0)
  • 2020-11-30 07:59

    In the general case, try the Schwartzian transform.

    Briefly, break out the number into its own field, sort on that, and discard the added field.

    # In many shells, use ctrl-v tab to insert a literal tab after the first \2
    sed 's/^\([^0-9]*\)\([0-9][0-9]*\)/\2   \1\2/' file |
    sort -n |
    cut -f2-
    

    This works nicely if the input doesn't have an obvious separator, like for the following input.

    abc1
    abc10
    abc2
    

    where you would like the sort to move the last line up right after the first.

    0 讨论(0)
  • 2020-11-30 08:02

    If available, simply use sort -V. This is a sort for version numbers, but works well as a "natural sort" option.

    $ ff=$( echo some.string_{100,101,102,23,24,25}_with_numbers.in-it.txt )
    

    Without sort:

    $ for f in $ff ; do echo $f ; done
    some.string_100_with_numbers.in-it.txt
    some.string_101_with_numbers.in-it.txt
    some.string_102_with_numbers.in-it.txt
    some.string_23_with_numbers.in-it.txt
    some.string_24_with_numbers.in-it.txt
    some.string_25_with_numbers.in-it.txt
    

    With sort -V:

    $ for f in $ff ; do echo $f ; done | sort -V
    some.string_23_with_numbers.in-it.txt
    some.string_24_with_numbers.in-it.txt
    some.string_25_with_numbers.in-it.txt
    some.string_100_with_numbers.in-it.txt
    some.string_101_with_numbers.in-it.txt
    some.string_102_with_numbers.in-it.txt
    
    0 讨论(0)
提交回复
热议问题