Need immediate help with sorting!!!


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need immediate help with sorting!!!
# 1  
Old 08-05-2008
Need immediate help with sorting!!!

hey,
I have a file that looks smthng like this:
/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*---abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*-- abcd_0055--*/
klhfdghd
dflkjgd
jfdg

I would like it to be sorted so that it looks like this:
/*---abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*-- abcd_0055--*/
klhfdghd
dflkjgd
jfdg

Basically, it sorts according to the numbers in the comment lines. What commands do I execute in the shell to get this?
# 2  
Old 08-05-2008
use
sort filename

foe help man sort
# 3  
Old 08-05-2008
Well, i did use that. This is what I typed in the shell:
grep 'abcd' filename | sort -n

But the problem is that it sorts and prints only those 3 comment lines(/headers) and none of the stuff under those lines. How do I get it print everything out after sorting those 3 headers???
# 4  
Old 08-05-2008
Hammer & Screwdriver Here is one approach

I had to 'fix' your input file; spacing and number of - characters. I figured you planned for the header line to be a regular format.

Code:
> cat file1
/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*--- abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*--- abcd_0055 ---*/
klhfdghd
dflkjgd
jfdg

> cat file1 | sed 's/\/\*/#\/\*/' | tr "\n" "~" | tr "#" "\n" | sort | tr -s "~" | tr "~" "\n"

/*--- abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*--- abcd_0055 ---*/
klhfdghd
dflkjgd
jfdg

# 5  
Old 08-05-2008
datz pretty confusing; what's with so many 'tr' commands?? Is this the only way or are there any other ways to get my desired output??
# 6  
Old 08-05-2008
Hi.

For folks that need more features than are found in standard sort, there is msort: MSORT

Here is a sample run with msort:
Code:
#!/bin/sh -

# @(#) s1       Demonstrate msort.

# See:
# http://billposer.org/Software/msort.html

set +o nounset
LC_ALL=C ; LANG=C ; export LC_ALL LANG
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version =o $(_eat $0 $1) msort
set -o nounset

FILE=${1-data1}
echo
echo " Data file $FILE:"
echo "12345678901234567890"
cat $FILE

echo
msort -b -e12,15 -c numeric -2 results -1 $FILE

echo
echo " Results from msort:"
echo
cat results

exit 0

producing (using joeyg's amended dataset on file data1):
Code:
$ ./s1
Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
Linux 2.6.25-2-686
GNU bash, version 3.2.39(1)-release (i486-pc-linux-gnu)
msort - no version provided for /usr/bin/msort.

 Data file data1:
12345678901234567890
/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*--- abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*--- abcd_0055 ---*/
klhfdghd
dflkjgd
jfdg

Key 1 obligatory  character range 11 through 14 Increasing numeric
Reading from data1.
Records processed:                          3
Sorting...
Records written:                            3
Comparisons:                                2

 Results from msort:

/*--- abcd_0005 ---*/
lkjkljbfkgj
ldfksjgf
dfkgfjb

/*--- abcd_0050 ---*/
asdfjk
adsfkja
lkjljgafsd

/*--- abcd_0055 ---*/
klhfdghd
dflkjgd
jfdg

This illustrates the CLI use. There is also a GUI front-end available ... cheers, drl
# 7  
Old 08-05-2008
Hammer & Screwdriver I will try to explain

Code:
> cat file1 | sed 's/\/\*/#\/\*/' | tr "\n" "~" | tr "#" "\n" | sort | tr -s "~" | tr "~" "\n"

display the file
change /* to #/* (to find later)
translate <new-line> to a ~
translate the # to a <new-line> (now, each record on one line only instead of 4)
sort
translate to get rid of (suppress) repetitive ~ characters
translate ~ to <new-line> (to put line back to four lines)

I often take multi-line inputs, and tr the <new-line> to ~ so I can treat multi-line records as one. Useful for sort and grep, for example. But, must place some kind of marker on the lines to assist in later putting the lines back to their original state.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sorting

Hii guys, I need to sort my file and remove duplicates before writing to another file. The first line in the file are column names. I dont want this line to be sorted and should always be the first line in the output. sort -u file.txt > file1.txt. is the command that i am using... (4 Replies)
Discussion started by: just4u_sharath
4 Replies

2. Shell Programming and Scripting

sorting help

Hi, Please i need help in writing an 'awk' script in sorting the following data; traceroute6 to 2001:1ba0:2a0:5965:0:30:24:1 (2001:1ba0:2a0:5965:0:30:24:1) from 2001:418:1::62, 64 hops max, 16 byte packets 1 2001:418:1::4 0.342 ms 2 2001:418:1::1 0.630 ms 3 2001:504:16::1b1b 0.393 ms 4... (6 Replies)
Discussion started by: sam127
6 Replies

3. Shell Programming and Scripting

sorting

Hi all, Does anyone can help me the following question? I would like to write an AWK script. In the following input file, each number in "start" is paired with numbers in column "end". No Start End A 22,222,33,22,1233,3232,44 555,333,222,55,1235,3235,66... (7 Replies)
Discussion started by: phoeberunner
7 Replies

4. Shell Programming and Scripting

Sorting HELP

Hi, I have posted related topic but as i continue the research I find more need to sort the data. AS(2607:f278:4101:11:dead:beef:f00f:f), AS786 AS6453 AS7575 AS7922 AS(2607:f2e0:f:1db::16), AS786 AS3257 AS36252 AS786 AS3257 AS36252 AS(2607:f2f8:1700::2), AS786 AS6939 AS25795 ... (6 Replies)
Discussion started by: sam127
6 Replies

5. UNIX for Advanced & Expert Users

HELP on sorting

hi everyone, I am kind of new to this forum. I need help in sorting this data out accordingly, I am actually doing a traceroute application and wants my AS path displayed in front of my address like this; 192.168.1.1 AS28513 AS65534 AS5089 AS5089 .... till the last AS number and if possible... (1 Reply)
Discussion started by: sam127
1 Replies

6. UNIX for Dummies Questions & Answers

HELP on sorting

hi everyone, I am kind of new to this forum. I need help in sorting this data out accordingly, I am actually doing a traceroute application and wants my AS path displayed in front of my address like this; 192.168.1.1 AS28513 AS65534 AS5089 AS5089 .... till the last AS number and if possible... (1 Reply)
Discussion started by: sam127
1 Replies

7. Shell Programming and Scripting

Sorting

Let's say that I have a database that I call part ID. This database has the following grouping: Dart1=4 Dart2=8 Dart3=12 Fork1=68 Fork2=72 Fork3=64 Bike1=28 Bike2=24 Bike3=20 Car1=44 Car2=40 Car3=36 I want to write a program that would read this database and tell me when the... (19 Replies)
Discussion started by: Ernst
19 Replies

8. Homework & Coursework Questions

Sorting help

i have list of files: Wang De Wong CVPR 09.pdf Yaacob AFGR 99 Second edition.pdf Shimon CVPR 01.pdf Den CCC 97 long one.pdf Ronald De Bour CSPP 04.pdf ..... how can i sort this directory so the output will be in the next format: <year>\t<conference/journal>\t<author list> - t is tab (its... (1 Reply)
Discussion started by: nirnir26
1 Replies

9. UNIX for Dummies Questions & Answers

Sorting help

i have list of files: Wang De Wong CVPR 09.pdf Yaacob AFGR 99 Second edition.pdf Shimon CVPR 01.pdf Den CCC 97 long one.pdf Ronald De Bour CSPP 04.pdf ..... how can i sort this directory so the output will be in the next format: <year>\t<conference/journal>\t<author list> - t is tab (its... (1 Reply)
Discussion started by: nirnir26
1 Replies

10. UNIX for Dummies Questions & Answers

Sorting help

how can i sort the next list just by look at the numbers (ignore letters) example: abc123 dff4f aaa2aa bbbb55555bb output: aaa2aa dff4f abc123 bbbb55555bb (1 Reply)
Discussion started by: nirnir26
1 Replies
Login or Register to Ask a Question