Help with sort in Linux


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with sort in Linux
# 1  
Old 05-03-2016
Help with sort in Linux

Hi everyone,
I have a text file with this following format:

Code:
w m a c G
 + V b y
 + d f e t

I'd like to sort it to a file with the following format (same number of lines, same number of fields, but all fields are sorted alphabetically)

Code:
 G V a b c
 + d e f
 + m t w y

I thought of a combination of sort, paste or sed command steps. Could anyone help ?
Thanks a lot,
Roseriver

Last edited by Don Cragun; 05-03-2016 at 06:31 PM.. Reason: Add CODE tags.
# 2  
Old 05-03-2016
I'm struggling to think of an alphabetic sort order where V comes before a b c. Even as ASCII numbers V comes last.
# 3  
Old 05-03-2016
In ascii capital letters preceed low-case letters: ascii
# 4  
Old 05-03-2016
I this a homework assignment? Homework and coursework questions can only be posted in the Homework & Coursework forum and must include a completely filled out homework template from the special homework rules.

If you did post homework in the main forums, please review the guidelines for posting homework and repost. If not, please explain why you need to sort items this way. And, please explain more clearly what you are trying to do...

In what manner of sort does a <+> character sort between <c> and <d> and also sort between <f> and <m>?
# 5  
Old 05-03-2016
Hi Don,
To answer your "rude" question:
1) This is the "real world" format of a subcircuit's pin order in Verilog or
CDL netlist. And I want to sort them in alphabetically order to be used in different environment such as Cadence.
example:
Code:
 
 .SUBCKT analog_top cfg_wait[2] cfgwait[1] iso_0p9
 + d_idac_div[1] d_mux_div  rx_reserved[3]
 + VDD1 GND2

2) The + character actually is similar to new line character. I am not sure why the netlist have it that way...
3) I was able to manually using nedit text editor to do what I want.
But it took me a while since I have to merge all fields into one line then sort it then break it into many lines again...
I just want to ask Linux experts if there is a better way of doing it ....
Best regards,
# 6  
Old 05-03-2016
Quote:
Originally Posted by roseriver
Hi Don,
To answer your "rude" question:
1) This is the "real world" format of a subcircuit's pin order in Verilog or
CDL netlist. And I want to sort them in alphabetically order to be used in different environment such as Cadence.
example:
Code:
 
 .SUBCKT analog_top cfg_wait[2] cfgwait[1] iso_0p9
 + d_idac_div[1] d_mux_div  rx_reserved[3]
 + VDD1 GND2

2) The + character actually is similar to new line character. I am not sure why the netlist have it that way...
3) I was able to manually using nedit text editor to do what I want.
But it took me a while since I have to merge all fields into one line then sort it then break it into many lines again...
I just want to ask Linux experts if there is a better way of doing it ....
Best regards,
Hi. I'm sorry you found the question rude. There are a few students who run into this forum hoping to get us to do their homework for them. When that happens it is bad for us and for them.

In your above example, is .SUBCKT also "special" in that it must appear first in the output no matter what else follows, or should it be sorted too? The way you are describing the <+> character, it sounds like a continuation character indicating that it is an extension of the previous line. Can your input files contain more than one Verilog or CDL pin order list that should be sorted separately?
# 7  
Old 05-03-2016
Assuming that there can be multiple subcircuit pin orders in a single file (with blank lines between them being ignored) and that the .SUBCKT string doesn't need to be treated specially, you could start with something like:
Code:
#!/bin/ksh
IAm=${0##*/}
tmpfile="$IAm.$$"
trap 'rm -f "$tmpfile"' EXIT

awk -v tmpfile="$tmpfile" '
BEGIN {	cmd = "sort > " tmpfile
}
function print_list(	data, i, j) {
	close(cmd)
	for(i = first; i <= last; i++) {
		if(i != first)
			printf(" +")
		for(j = 1 + (i != first); j <= count[i]; j++) {
			getline data < tmpfile
			printf(" %s%s", data, (j == count[i]) ? "\n" : "")
		}
	}
	close(tmpfile)
}
NF == 0 {
	next
}
$1 != "+" {
	if(NR > 1)
		print_list(first, last)
	count[first = last = NR] = NF
	for(i = 1; i <= NF; i++)
		print $i | cmd
	next
}
{	count[last = NR] = NF
	for(i = 2; i <= NF; i++)
		print $i | cmd
}
END {	print_list()
}' file

which, if file contains:
Code:
w m a c G
 + V b y
 + d f e t

 .SUBCKT analog_top cfg_wait[2] cfgwait[1] iso_0p9
 + d_idac_div[1] d_mux_div  rx_reserved[3]
 + VDD1 GND2

(as in your two examples) produces the output:
Code:
 G V a b c
 + d e f
 + m t w y
 .SUBCKT GND2 VDD1 analog_top cfg_wait[2]
 + cfgwait[1] d_idac_div[1] d_mux_div
 + iso_0p9 rx_reserved[3]

This was written and tested using the Korn shell, but should work with any shell that recognizes basic POSIX-required shell syntax (such as ash, bash, dash, ksh, zsh , and several others) but not a pure Bourne shell and not a shell based on csh syntax.

Obviously, error checking should be added to the above if you're going to use this in a production environment, but I'll leave that as an exercise for the reader.

If someone else want to try this on a Solaris/SunOS system, change awk in the script to /usr/xpg4/bin/awk or nawk.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Linux find jpg and sort by date

I want to find all jpg files and then sort them by modification date. This is where I started. find . -type f -name "*.jpg" I tried to pipe a sort in there but that did not seem to work. Do I need to use xargs? (10 Replies)
Discussion started by: cokedude
10 Replies

2. Shell Programming and Scripting

Sort help: How to sort collected 'file list' by date stamp :

Hi Experts, I have a filelist collected from another server , now want to sort the output using date/time stamp filed. - Filed 6, 7,8 are showing the date/time/stamp. Here is the input: #---------------------------------------------------------------------- -rw------- 1 root ... (3 Replies)
Discussion started by: rveri
3 Replies

3. Homework & Coursework Questions

linux sort command

This is the question being asked: (Sort your data file by last name first, then by the first name second - save as first_last.) I am not quite sure of the type of sort I am being asked to perform. I have read the man pages of the sort command a few times, as well as searching online for possible... (10 Replies)
Discussion started by: demet8
10 Replies

4. UNIX for Dummies Questions & Answers

LINUX SORT command chops results

I am trying to sort a file . The file looks like this: DDFF 2 /ztpfrepos/pgr/load DDFQ 2 /ztpfrepos/pgr/load DDFX 2 /ztpfrepos/pgr/load DDUA 2 /ztpfrepos/pgr/load My command: sort -k1 /home/c153507/Bin/OPL1.txt -o /home/c153507/Bin/OPL1.txt The results are OK except for one line where... (4 Replies)
Discussion started by: Yahalom
4 Replies

5. Linux

sort command in centos linux os

Iam working on centos os. Iam not able to sort records without option Please help me out Jayaprakash B. (1 Reply)
Discussion started by: jpachar
1 Replies

6. UNIX for Dummies Questions & Answers

linux sort command produces strange output

cat a .a ba .b bb .c bc sort a .a .b ba bb bc .c NOTE: .a and .b appears before ba and bb, where as .c appears after bc. In general (3 Replies)
Discussion started by: ajb
3 Replies

7. UNIX for Advanced & Expert Users

Script to sort the files and append the extension .sort to the sorted version of the file

Hello all - I am to this forum and fairly new in learning unix and finding some difficulty in preparing a small shell script. I am trying to make script to sort all the files given by user as input (either the exact full name of the file or say the files matching the criteria like all files... (3 Replies)
Discussion started by: pankaj80
3 Replies

8. Shell Programming and Scripting

difference in unix vs. linux sort

Hi, I am using some codes that have been ported from unix to linux, and now the sorting no longer results in the desired ordering. I'm hoping to find a way to mimic the unix sort command in linux. The input file is structured the following: $> cat file.txt... (6 Replies)
Discussion started by: aj.schaeffer
6 Replies

9. UNIX for Dummies Questions & Answers

Linux Sort command

Hello! Can anybody explain in laymen terms what the (+) option in the sort command for Linux does? Please. Thanks in advance!!:D (1 Reply)
Discussion started by: itisijayare
1 Replies

10. Shell Programming and Scripting

help newb at linux and bash need numeric script sort

I am trying to setup to automatically import a series of mysql database files. I am doing manually now and its a royal pain. All the sql files are sequentially numbered in a format of 4 numbers underscore text with spaces replaced by underscores. example: There are 3 databases each setup... (1 Reply)
Discussion started by: dlm1065
1 Replies
Login or Register to Ask a Question