Sponsored Content
Full Discussion: sort script
Top Forums Shell Programming and Scripting sort script Post 302713997 by LMHmedchem on Thursday 11th of October 2012 02:02:03 PM
Old 10-11-2012
Wow, thanks allot for working this out. This will really save me allot of time. It looks like it would be reasonable to make simple changes, like to alphanumeric sorting, or to change the sort order.

After a few changes to make this into a callable script run in bash, this is what I ended up with.
Code:
#!/usr/bin/bash

# call with $1 list of column headers to be sorted on, one header per line
# call with $2 name of file to be sorted

# will be prefixed to name of data file to create output file
OUTPUPREFIX="_makesdf"

# parse arguments
KEYFILE=$1
DATAFILE=$2

# make sure input is has unix EOL
dos2unix -q $KEYFILE
dos2unix -q $DATAFILE

# change to dbg=1 for debug output to logfile
#awk -v dbg=1 '
awk -v dbg=0 '
BEGIN{  FS = OFS = "\t"}
FNR==NR{# We are in the 1st file.  Each line is the name of a field to be used
        # as a sort key, with the 1st line being the primary sort key.
        key[++nk] = $1
        next
}
FNR==1{ # We are on the 1st line of the 2nd file.  Determine the sort command
        # to use to implement the desired sort order.  All keys are to be
        # treated as ascending order numeric fields.
        sortcmd = "sort -t \"" FS "\" -n"
        for(i = 1; i <= nk; i++) {
                # For each key...
                for(j = 1; j <= NF; j++) {
                        if($j == key[i]) {
                                # We have a match...
                                if(dbg)printf("key[%d](%s) is field %d\n",
                                        i, key[i], j) > "debug.out"
                                if(dbg)keyf[i] = j
                                sortcmd = sortcmd " -k" j "," j
                                break
                        }
                }
                if(j > NF) {
                        # This key does not have a matching field heading.
                        printf("sorter: No heading matches key[%d] (%s)\n",
                                i, key[i])
                        ec = 1
                }
        }
        if(ec) exit ec
        if(dbg)printf("sortcmd is \"%s\"\n", sortcmd) > "debug.out"
        print
        next
}
{       # We have a data line.  Feed it to sort.
        if(dbg) {
                printf("line %d key info: %s", FNR, $keyf[1]) > "debug.out"
                for(i = 2; i <= nk; i++) printf("\t%s", $keyf[i]) > "debug.out"
                printf("\t%s\n", $1) > "debug.out"
        }
        print | sortcmd
}
END{    close(sortcmd)
}' $KEYFILE  $DATAFILE > $OUTPUPREFIX"_"$DATAFILE

I have a local sort file with the list of headers to sort on, and this scripts lives with the rest of my path tools (/usr/local/bin/) so I can call it from the shell or another script.

Thanks again,

LMHmedchem
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

sort utility in script ?

Hi friends, I want to use sort command in script. I used the following syntax in my scipt, sort -t '|' +3 tempcdrext4.cdr > temp.mocdr It give me a error " Input file specified two times." but this command work fine in the prompt without any problem. Can sombody please tell me who... (2 Replies)
Discussion started by: maheshsri
2 Replies

2. UNIX for Dummies Questions & Answers

sort script/command

ok. i am doing a project where i have hand typed in the titles of nearly 500 DVD titles, each one is on a seperate line. but they arent in any type of alphebetical order, and i need them sorted in that format (A-Z or a-z) ..... i know that the 'sort' command can be used but also know the... (6 Replies)
Discussion started by: Chadbot
6 Replies

3. Shell Programming and Scripting

Script to sort data

Hi All, I have a .csv file with 3 columns called nLats, nLongs, and fRes. in following format : "nLats","nLongs","fRes" 0,0,-1 0,1,-1 0,2,-1 0,3,-1 0,4,-1 ......... ......... 0,143,-1 nLats increments at nLongs=143 1,0, -1 1,1, -1 .......... .......... 1,143,-1... (1 Reply)
Discussion started by: wizardy_maximus
1 Replies

4. Shell Programming and Scripting

Using sort with awk script

I have a file with four fields and an awk script that strips out one field displaying the remaining three. I have added headings for each of these fields such as Player - Year - RBIs then below it comes the data. What I am trying to do is sort the RBIs field in my script from most to least at the... (9 Replies)
Discussion started by: Trellot
9 Replies

5. Shell Programming and Scripting

need Unix script to sort

Hi i have a file like this oprvdw vrc002093j.ksh oprvdw vrc002092j.ksh oprvrc vrc045016j.ksh oprvrc vrc055141j.ksh svemietl bdw0231185.sh svemietl bdw0231145.sh and i need a script which dispalys in below format: oprvdw : vrc002093j.ksh vrc002092j.ksh oprvrc :... (0 Replies)
Discussion started by: p_satyambabu
0 Replies

6. 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

7. UNIX for Dummies Questions & Answers

sort script

hi guys i looking for someone to help me with a script i want to sort all de files from /bin by size (from max to min) and the size and path of first 3 files to be written in /home/user/bin_size .And i want to put that script in crontab to execute every monday at 20:00 Can someone help me... (2 Replies)
Discussion started by: G30
2 Replies

8. 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

9. Shell Programming and Scripting

Script to Sort into columns

Hi geeks! I want to convert the following: EPC-NotificationData: sms:2348034503643 EPC-GroupIds: 300H:10:22-01-2014T07:30:14,22-04-2014T07:30:14 To: EPC-NotificationData: sms:2348034503643, EPC-GroupIds: 300H:10:22-01-2014T07:30:14,22-04-2014T07:30:14 I want them to be on the same... (13 Replies)
Discussion started by: infinitydon
13 Replies

10. UNIX for Beginners Questions & Answers

Shell script to call and sort awk script and output

I'm trying to create a shell script that takes a awk script that I wrote and a filename as an argument. I was able to get that done but I'm having trouble figuring out how to keep the header of the output at the top but sort the rest of the rows alphabetically. This is what I have now but it is... (1 Reply)
Discussion started by: Eric7giants
1 Replies
DCSORT(1)					      DICOM PS3 - Make sorted list of images						 DCSORT(1)

NAME
dcsort - ACR/NEMA DICOM PS3 ... DICOM PS3 - Make sorted list of images SYNOPSIS
dcsort " inputfile1 [ inputfile2 ... ]" [ -v|verbose ] [ -vv|veryverbose ] [ -vvv|veryveryverbose ] [ -index ] [ -show ] [ -interval ] [ -tolerance mm ] [ -check ] [ -checkFoR ] [ -descending ] [ -sortby|k attributename ] DESCRIPTION
dcsort reads the named dicom input files and sorts them by the specified sort key. The sort key should be a single valued numeric attribute, with the exception of ImageOrientationPatient and ImagePositionPatient which are handled as special cases. There is no output by default unless the index or verbose options are specified. OPTIONS
The output and errors go to standard error. The basic input switches are described in dcintro(1). Options specific to this program are: -index Creates a first column of output that is the index in the sort order, starting from 0, and a second column that is the filename. -show Show the value of the sort key after the file name with the -index option -interval Show the interval between values of the sort key, or an error if not equal -tolerance mm The tolerance value in mm to use when comparing intervals between slices; defaults to +/- 0.01 mm if unspecified -check Check that all the images are from the same series. -checkFoR Check that all the images have the same Frame of Reference (UID). -descending Sort in descending, rather than the default ascending, order. -sortby|k attributename Specify attributename as the sort key. ENVIRONMENT
EXAMPLES
% dcsort -index -sortby SliceLocation ./1/[0-9]* 0 ./1/1 1 ./1/2 FILES
SEE ALSO
dcintro(1) AUTHOR
Copyright (C) 1993-2010. David A. Clunie DBA PixelMed Publishing. All rights reserved. BUGS
DICOM PS3 22 December 2006 DCSORT(1)
All times are GMT -4. The time now is 04:27 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy