in reply to Re^2: Sorting a text file
in thread Sorting a text file

You are quite right. However if you have duplicate keys how do you expect the sort to arrange those lines? Do you fall back to a secondary key, or does it not matter, or do you retain the original file order? You could for example rely on sort's stability in recent versions of Perl to retain the lines with identical keys in file order:

use strict; use warnings; print sort {substr ($a, 9, 4) cmp substr ($b, 9, 4)} <DATA> __DATA__ ...

Prints (using the original data):

77809 7211 CA84985 54E 77875 7725 CA84985 54E 77822 7874 CA84985 54E 77873 8003 CA84985 54E 77826 8040 CA84985 54E 77873 8123 CA84985 54E 77819 8503 CA84985 54E 77872 8511 CA84985 54E 77876 8543 CA84985 54E 77884 8543 CA84985 54E 77822 9908 CA84985 54E

DWIM is Perl's answer to Gödel

Replies are listed 'Best First'.
Re^4: Sorting a text file
by ArifS (Beadle) on Dec 06, 2016 at 17:57 UTC
    This seems to work with digits as shows above, however, I couldn't make it work for the following while sorting with the 2nd word (combination)-
    _DATA_ CCCCCC-NF-33 LONDON_JAM_2AAA END-ONE_2TWO DDDDDD-NF_52 VENICE_CCC_1ZZZ WHAT_WHEN-1WHY KKKKK-INF_44 JAMAICA_AAA_3TTT HOW-WHERE_3WHAT AAAAA-INF-32 LONDON_JAM_2AAA END-ONE_2TWO BBBBB-INF-12 JAMAICA_AAA_3TTT WHAT_WHEN-1WHY VVVVV-INF_24 VENICE_CCC_1ZZZ END-ONE_2TWO
    Any suggestion?

      Suggestion: then sort by the second word

      #!/usr/bin/perl # http://perlmonks.org/?node_id=1177316 use strict; use warnings; print sort { (split ' ', $a)[1] cmp (split ' ', $b)[1] } <DATA>; __DATA__ CCCCCC-NF-33 LONDON_JAM_2AAA END-ONE_2TWO DDDDDD-NF_52 VENICE_CCC_1ZZZ WHAT_WHEN-1WHY KKKKK-INF_44 JAMAICA_AAA_3TTT HOW-WHERE_3WHAT AAAAA-INF-32 LONDON_JAM_2AAA END-ONE_2TWO BBBBB-INF-12 JAMAICA_AAA_3TTT WHAT_WHEN-1WHY VVVVV-INF_24 VENICE_CCC_1ZZZ END-ONE_2TWO
        This is a good solution. Thanks