Visit The New, Modern Unix Linux Community


Sort by specific order?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort by specific order?
# 1  
Sort by specific order?

Hello all

I was wondering if someone has an idea how to sort by a specific order, let's say by a specific alphabet containing only 4 letters like (d,s,a,p) instead of (a,b,c....z) ??

Cheers!
# 2  
Could you give input/output examples?
# 3  
Sure, here's an example.
A file containing the following ascii text:
Code:
axxx whatever xxxx ...
pxxx whatever xxxx ...
daxxx whatever xxxx ...
sxxx whatever xxxx ...
dbxxx whatever xxxx ...

should be sorted as:

Code:
daxxx whatever xxxx ...
dbxxx whatever xxxx ...
sxxx whatever xxxx ...
axxx whatever xxxx ...
pxxx whatever xxxx ...

Only first char is important to define order (order should be d,s,a,p) - which means, fist char will always be one of this letters (d,s,a,p)
After first char normal alphanumeric sort is fine (1,2...9,a,b,c,d...z)
# 4  
You can give this a try (not tested):
Code:
awk '/^d/{print 1 $0} /^s/{print 2 $0}/^a/{print 3 $0}/^p/{print 4 $0}' file | sort | awk '{print substr($0,2)}'

# 5  
you can try using something like below:
source file:
88
Code:
$ cat ishan1
axxx whatever xxxx ...
pxxx whatever xxxx ...
daxxx whatever xxxx ...
sxxx whatever xxxx ...
dbxxx whatever xxxx ...
axxx whatever xxxx ...
pxxx whatever xxxx ...
daxxx whatever xxxx ...
sxxx whatever xxxx ...
dbxxx whatever xxxx ...
axxx whatever xxxx ...
pxxx whatever xxxx ...
daxxx whatever xxxx ...
sxxx whatever xxxx ...
dbxxx whatever xxxx ...

you can now have a script like:
"ishan2.ksh" 5 lines, 102 characters
Code:
#!/usr/bin/ksh
cat ishan1 | grep ^d
cat ishan1 | grep ^s
cat ishan1 | grep ^a
cat ishan1 | grep ^p

the output will be like:
Code:
daxxx whatever xxxx ...
dbxxx whatever xxxx ...
daxxx whatever xxxx ...
dbxxx whatever xxxx ...
daxxx whatever xxxx ...
dbxxx whatever xxxx ...
sxxx whatever xxxx ...
sxxx whatever xxxx ...
sxxx whatever xxxx ...
axxx whatever xxxx ...
axxx whatever xxxx ...
axxx whatever xxxx ...
pxxx whatever xxxx ...
pxxx whatever xxxx ...
pxxx whatever xxxx ...


Last edited by Scrutinizer; 02-01-2013 at 10:33 AM.. Reason: code tags
# 6  
awk thingie:
Code:
awk '{f=substr($1,1,1); A[f]=A[f] $0 RS} END{ s=A["d"] A["s"] A["a"] A["p"]; print s}' ORS= file

--
Some awks can do this:
Code:
awk '{A[$1]=A[$1] $0 RS} END{ n=split(order,O); for(i=1; i<=n; i++) print A[O[i]]}' order=dsap FS= ORS= file

---
elaborating on Ishan's grep example:
Code:
for i in d s a p; do
  grep "^$i" infile
done > outfile

--
sorting of the characters after the first character:
Code:
sed 's/./& /' file | sort -k2 |
awk '{f=$1; sub(FS,x); A[f]=A[f] $0 RS} END{ s=A["d"] A["s"] A["a"] A["p"]; print s}' ORS=


Last edited by Scrutinizer; 02-01-2013 at 09:53 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 7  
Code:
perl -e'BEGIN {
  %h = map { $_, ++$c } split //, shift
  }
  print sort { $h{substr $a, 0, 1} <=> $h{substr $b, 0, 1} } <>  
  ' "dsap" infile

This User Gave Thanks to radoulov For This Post:

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #792
Difficulty: Easy
In mathematics and digital electronics, a binary number is a number expressed in the base-2 numeral system or binary numeral system.
True or False?

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Sort in chronological order

I am trying to sort a log file in chronological order to identify which ones did not process and still have an old (probably yesterday's) date. This is a sample of the file:flatf 010140 flatf Thu May 10 22:22:11 CST 2018 flats finished flatf 010142 flatf Thu May 10 22:31:25 CST 2018 flats... (4 Replies)
Discussion started by: wbport
4 Replies

2. Shell Programming and Scripting

Sort numeric order

Hi I am using this cat substitutionFeats.txt | gawk '{$0=gensub(/\t/,"blabla",1);print}' | gawk '{print length, $0}' | sort -n | sort -r and the "sort -n" command doesn't work as expected: it leads to a wrong ordering: 64 Adjustable cuffs 64 Abrasion- 64 Abrasion pas 647 Sanitized 647... (4 Replies)
Discussion started by: louisJ
4 Replies

3. UNIX for Dummies Questions & Answers

sort by column or specific order

Hi, I need to sort it by column or need it in a specific order... input is ===== uid=shashi country= india region =0 ph=0 uid= jon region= asia ph= 12345 country=0 uid = man country= india ph=2222 region=0 uid= neera region= asia ph= 125 country=0 output should be uid=shashi ... (1 Reply)
Discussion started by: hegdeshashi
1 Replies

4. Shell Programming and Scripting

sort order HP UX / SUN Solaris

Hi! simple 'sort' produces a different output on SUN OS than on HP. Lines with empty fields inside the key are sorted at the beginning on SUN; on HP they are at the end. i.e SUN 03|ref|168126310|702578641|||||||||||||| 03|ref|168126310|702578641|DEL| 03|ref|168126310|702578641|FW|... (5 Replies)
Discussion started by: strolchFX
5 Replies

5. UNIX for Dummies Questions & Answers

sort -reverse order

I need to sort the particular column only in reverse order how i can give it.. if i give the -r option the whole file is getting sorted in reverse order. 1st 2nd col 3rd C col 4th col 5th col ------------------------------------------- C... (7 Replies)
Discussion started by: sivakumar.rj
7 Replies

6. Shell Programming and Scripting

alphabetical order with out using sort command

hai, how can i sort a file alphabetically without using sort command (6 Replies)
Discussion started by: rahul801
6 Replies

7. Shell Programming and Scripting

SORT order in Unix

I am converting mainframes JCL to be used in shell on a one to one basis... when i use the sort command unix does ascii sort as a result which numbers are first followed by charecters in the Ascending sort ... but themainframes uses the EBCDIC as result gives the charecters followed by numbers in... (5 Replies)
Discussion started by: bourne
5 Replies

8. UNIX for Dummies Questions & Answers

replacing characters in order to sort

hi, i want to rename all the file names in order so that they can be sorted later. For example, my filenames are like path\1, path\2...path\10, path\11. But when I sort them, it sorts by the first number, so path\1 gets sorted with path\10. I'm guessing the best way to do this is to rename... (5 Replies)
Discussion started by: gammaman
5 Replies

9. UNIX for Dummies Questions & Answers

Sort - original order .... Help

Hi all, I want to sort a file based on the number in the 9th column I've tried both of the following commands sort -k 9,9n file_to_sort.dat sort +8 -n file_to_sort.dat both resulting in the same output which does sort col 9 nummerically but it doesn't output the lines in the original... (2 Replies)
Discussion started by: olga
2 Replies

10. UNIX for Dummies Questions & Answers

Sort / ascending order

What's the command to sort a file in ascending order and redirect the output to another file? Thanks!!!!!! (1 Reply)
Discussion started by: gyik
1 Replies

Featured Tech Videos