Skip to content
Advertisement

Sort a find command to respect a custom order in Unix

I have a script that outputs file paths (via find), which I want to sort based on very specific custom logic:

  • 1st sort key: I want the 2nd and, if present, the 3rd --separated field to be sorted using custom ordering based on a list of keys I supply – but excluding a numerical suffix.
    With the sample input below, the list of keys is:
    rp,alpha,beta-ri,beta-rs,RC

  • 2nd sort key: numeric sorting by the trailing number on each line.

Given the following sample input (note that the /foo/bar/test/example/8.2.4.0 prefix of each line is incidental):

JavaScript

I expect:

JavaScript

Advertisement

Answer

Using a variant of my answer to your original question:

JavaScript

./your-script represents whatever command produces the output you want to sort.

Note that an aux. character, |, is used to facilitate sorting, and the assumption is that this character doesn’t appear in the input – which should be reasonable safe, given that filesystem paths usually don’t contain pipe characters.

Any field 2 values (sans numeric suffix) that aren’t in the list of sort keys, sort after the field 2/3 values that are, using alphabetic sorting among them.

User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement