On 05/19/2012 05:40 AM, e.sambasivarao wrote: > Dear Sir, > > By using the following sort command to sort the input > file due, the output due is showing as : > > sort -dfi -k1.11,1.39 -odue due > > > > 123180024 BIJJALA ESWARA RAO 1580.50 > 061233693 BIJJALA JANARDHAN RAO 2280.00 > 123812394 BIJJALA VENKATESWAR RAO 1682.50 > 123349123 BIRJALA JANARDHAN RAO 2794.20 > 123712310 B.KRISHNA MURTHY 2362.50 > 123234123 B MUTHAIAH 1727.00 > 038123230 B NAGESWAR RAO 1625.00 > 121237123 BODA VIJAYA 2827.00 > 041237267 BODDU APPAIAH 485.60 > 123123361 BODDU SRINIVASA RAO 4540.00 > 012316123 BODDU VEERA SWAMY 1527.50 > > Sorting was on name order (i.e. position 11 to 39) > After 4 records i.e after BIRJALA JANARDHAN RAO, > we find B.KRISHNA MURTHY where as B.KRISHNA MUTHY, > B MUTHAIAH, B NAGESWAR RAO come first in sorted > order , kindly guide us.
Well there are a few things going on here. -d will exclude '.' but include ' ' -f is redundant with -d as -d is a subset of -f (I think) Also your locale make exclude punctuation chars from the search. I.E. cause ' ' to be disregarded in the sort. Now with -d, sort will not treat '.' and ' ' equivalently, or sort in ASCII order. So you have 2 options I think: tr '.' ' ' < due | LANG=C sort -di -k1.11,1.39 > due.sorted LANG=C sort -i -k1.11,1.39 -o due due The former will convert '.' to ' ', while the latter will include non dictionary chars in the sort. cheers, Pádraig.
