Is this sort working as it is supposed to be? A bit confused whether it is sorting correctly or not

Hi,

Below is the sample file:

$ cat x.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
OUTLN|OL$|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYSTEM|OL$|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE

Simply doing sort

$ sort x.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
OUTLN|OL$|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYSTEM|OL$|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE

I am expecting the one below:

SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYSTEM|OL$|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE

to be

SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYSTEM|OL$|TABLE

Shouldn't that be the case? Anyway, I thought maybe there is some special characters of some sort so I did a strings and it is still the same :(. What am I missing?

$ cat x.txt | strings > y.txt
$ sort y.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
OUTLN|OL$|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYSTEM|OL$|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE

I have also tried sort -t"|" -k1. It's the same problem. I am confused. BTW, I thought maybe 'coz I am using a pipe (|) as the delimiter. I change them to a comma (,) and it is still the same. Please advise.

I cannot duplicate your problem.
With sort, using a cut and paste copy of your example input, and using sort as the only command I get:

SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
SYSTEM|OL$|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE

Which is the expected result.

  1. please tell us your OS and shell
  2. please post the output of
echo  '
SYS|PSTUBTBL|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE'  | od -c

I think there is a non-printing character in there somewhere. You can also use cat -v to see

Your attempt to sort -t"|" -k1 is not enough, as ( man sort )

, so -k1 is equivalent to no key at all. Try

sort -t"|" -k1,1  file
1 Like

@Jim

Not sure if this is what you are after. That is my first thought too, there is a special / hidden / unprintable character somewhere.

Please find below echo and the sort and OS flavor.

The one that RudiC suggested works find. I've also uploaded the test.txt file if you still want to give it a go.

$ echo 'SYS|PSTUBTBL|TABLE' | od -c
0000000   S   Y   S   |   P   S   T   U   B   T   B   L   |   T   A   B
0000020   L   E  \n
0000023
$ echo 'SYS|WRI$_ADV_ASA_RECO_DATA|TABLE' | od -c
0000000   S   Y   S   |   W   R   I   $   _   A   D   V   _   A   S   A
0000020   _   R   E   C   O   _   D   A   T   A   |   T   A   B   L   E
0000040  \n
0000041
$ view xx.txt
$ echo 'SYSTEM|OL$HINTS|TABLE' | od -c
0000000   S   Y   S   T   E   M   |   O   L   $   H   I   N   T   S   |
0000020   T   A   B   L   E  \n
0000026
$ echo 'SYSTEM|OL$NODES|TABLE' | od -c
0000000   S   Y   S   T   E   M   |   O   L   $   N   O   D   E   S   |
0000020   T   A   B   L   E  \n
0000026


$ sort -t"|" -k1,1 test.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE


$ sort test.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE


$ uname -a
Linux [hostname] 2.6.18-419.el5 #1 SMP Wed Feb 22 22:40:57 EST 2017 x86_64 x86_64 x86_64 GNU/Linux
$ cat redhat-release
Red Hat Enterprise Linux Server release 5.11 (Tikanga)

Silly me :o, it does sort like what it should be doing what you said.
Still a bit lost why a 'normal' sort doesn't sort like I expect it to be :eek:

Cygwin sorts differently too but at least using sort -t"|" -k1,1 gives the same output as just doing sort

$ uname -a
CYGWIN_NT-6.2-WOW64 [host] 1.7.5(0.225/36/3) 2010-09-26 22:50 i686 GNU/Linux

$ sort test.txt
MDSYS|OGIS_GEOMETRY_COLUMNS|TABLE
MDSYS|OGIS_SPATIAL_REFERENCE_SYSTEMS|TABLE
MDSYS|SDO_IDX_TAB_SEQUENCE|SEQUENCE
MDSYS|SDO_PREFERRED_OPS_USER|TABLE
MDSYS|SDO_ST_TOLERANCE|TABLE
MDSYS|SDO_TOPO_DATA$|TABLE
MDSYS|SDO_TOPO_RELATION_DATA|TABLE
MDSYS|SDO_TOPO_TRANSACT_DATA$|VIEW
MDSYS|SDO_TXN_IDX_DELETES|TABLE
MDSYS|SDO_TXN_IDX_EXP_UPD_RGN|TABLE
MDSYS|SDO_TXN_IDX_INSERTS|TABLE
MDSYS|SRSNAMESPACE_TABLE|TABLE
MDSYS|USER_ANNOTATION_TEXT_METADATA|VIEW
MDSYS|USER_SDO_3DTHEMES|VIEW
MDSYS|USER_SDO_3DTXFMS|VIEW
MDSYS|USER_SDO_ANIMATIONS|VIEW
MDSYS|USER_SDO_CACHED_MAPS|VIEW
MDSYS|USER_SDO_GEOM_METADATA|VIEW
MDSYS|USER_SDO_LIGHTSOURCES|VIEW
MDSYS|USER_SDO_LRS_METADATA|VIEW
MDSYS|USER_SDO_MAPS|VIEW
MDSYS|USER_SDO_SCENES|VIEW
MDSYS|USER_SDO_STYLES|VIEW
MDSYS|USER_SDO_THEMES|VIEW
MDSYS|USER_SDO_VIEWFRAMES|VIEW
ORDDATA|ORDDCM_CONFORMANCE_VLD_MSGS|VIEW
OUTLN|OL$HINTS|TABLE
OUTLN|OL$NODES|TABLE
SYSTEM|OL$HINTS|TABLE
SYSTEM|OL$NODES|TABLE
SYS|DATA_PUMP_XPL_TABLE$|TABLE
SYS|IMPDP_STATS|INDEX
SYS|IMPDP_STATS|TABLE
SYS|KU$NOEXP_TAB|TABLE
SYS|KU$XKTFBUE|TABLE
SYS|KU$_DATAPUMP_MASTER_10_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1_0_7|TABLE
SYS|KU$_DATAPUMP_MASTER_11_1|TABLE
SYS|KU$_DATAPUMP_MASTER_11_2|TABLE
SYS|KU$_LIST_FILTER_TEMP_2|TABLE
SYS|KU$_LIST_FILTER_TEMP|TABLE
SYS|ODCI_SECOBJ$|TABLE
SYS|ODCI_WARNINGS$|TABLE
SYS|PLAN_TABLE$|TABLE
SYS|PSTUBTBL|TABLE
SYS|WRI$_ADV_ASA_RECO_DATA|TABLE
XDB|PATH_VIEW|VIEW
XDB|RESOURCE_VIEW|VIEW
XDB|XDB$ACL|TABLE
XDB|XDB$IMPORT_TT_INFO|TABLE
XDB|XDB$RESCONFIG|TABLE
XDB|XDB$XIDX_IMP_T|TABLE