Sort with conditions


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Sort with conditions
# 1  
Old 02-25-2016
Sort with conditions

Gents,

I would like to sort the following file using this conditions.

Key is column 1 and column 7, The conditions are:

if column 3 > 1 the sort need to be in reverse otherwise no need to sort.
if column 4 > 6,26 the sort need to be in reverse otherwise no need to sort.

Using this conditions sort columns 1 an seven in increase.

Input file

Code:
3653952085          2          1       25.0       2544  36539520852 051085342
3653952073          1          1       1.73       2544  36539520731 051083656
3653952073          2         14       1.58       2544  36539520732 051090142
3653952061          1          1       0.58       2544  36539520611 051083819
3653952061          2          1       0.94       2544  36539520612 051090257
3653952049          1          1       0.22       2544  36539520491 051091118
3653952049          2          7       0.25       2544  36539520491 051091125
3653952049          3          1       7.35       2544  36539520491 051091132

Output desired.

Code:
3653952085          2          1       25.0       2544  36539520852 051085342
3653952085          1          1       0.42       2544  36539520851 051082559
3653952073          2         14       1.58       2544  36539520732 051090142
3653952073          1          1       1.73       2544  36539520731 051083656
3653952061          1          1       0.58       2544  36539520611 051083819
3653952061          2          1       0.94       2544  36539520612 051090257
3653952049          2          7       0.25       2544  36539520491 051091125
3653952049          3          1       7.35       2544  36539520491 051091132
3653952049          1          1       0.22       2544  36539520491 051091118

I have try this, but does not work properly .. I dont know how use the conditions.

Code:
sort -nk1,1 -rk3,3 -rk4,4 -nk7,7

Thanks for your helpSmilie
# 2  
Old 02-25-2016
I don't understand your conditions. Do those conditions apply to just the first record or to ANY record? Also does your "6,26" really mean "6.26", using a period (not a comma) to indicate a decimal point?
This User Gave Thanks to wbport For This Post:
# 3  
Old 02-25-2016
Hi wbport.

Yes the conditions aré for all récords in the column specified, And it is 6.26

Thanks
# 4  
Old 02-25-2016
Your conditions don't make sense given your sample data and are incomplete. And, with your stated conditions, there is no way to do that with a single invocation of the sort utility.

You state that your primary sort key is column1 AND column7 (and that is fine) and that can be done with:
Code:
sort -n -k1,1 -k7,7 file

Then you say the order is reversed if column3 is greater than 1 (which is true for 2 lines and false for the other lines) and the order is reversed (maybe reversing the earlier decision based on column3???) if column 4 is greater than 6.26 (which is true for 2 different lines and false for the other lines).

And you sample desired output is sorted in reverse order on column1 and sometimes increasing order within column1 on column7 and sometimes on decreasing order within column1 on column7.

I'm lost.
This User Gave Thanks to Don Cragun For This Post:
# 5  
Old 02-25-2016
A script to run this would probably do a reverse numeric sort on field 3, pipe it to a head -1 command to get the first record from the sort (will have the highest value), and select the 3rd field to compare it to 1. If that fails, do the same thing on field 4, comparing the 4th field to 6.26 . If both fail, exit
Quote:
otherwise no need to sort
. If either pass, continue with your sort.

Is there any condition where you would do an ascending sort (i.e., without the -r option)? The question didn't seem clear to me.
This User Gave Thanks to wbport For This Post:
# 6  
Old 02-25-2016
Sorry for the confusion...

The idea is to eliminate rows with duplicate value ( column 1)..

Example

In this case the column 3 the second row has value more than 1, so I should delete this column..
Code:
3653952073          2         14       1.58       2544  36539520732 051090142 
3653952073          1          1       1.73       2544  36539520731 051083656

In this case the first record in column 4 is greater than 6.25, so I need to delete this row.
Code:
3653952085          2          1       25.0       2544  36539520852 051085342 
3653952085          1          1       0.42       2544  36539520851 051082559

In this case column 4 and 5, both conditions are correct in that case I should sort by column 7 (time) and delete the record . with time 051083819

Code:
3653952061          1          1       0.58       2544  36539520611 051083819 
3653952061          2          1       0.94       2544  36539520612 051090257

Mi idea was to sort it and then use the following code to delete the duplicate records.
Code:
awk 'NR==FNR{L[$1]=FNR; next} L[$1]==FNR'

That is the reason why I was trying to sort it.

Hope you get the idea and can help me with one script for this

With the example before,

Input
Code:
3653952085          2          1       25.0       2544  36539520852 051085342
3653952085          1          1       0.42       2544  36539520851 051082559
3653952073          2         14       1.58       2544  36539520732 051090142
3653952073          1          1       1.73       2544  36539520731 051083656
3653952061          1          1       0.58       2544  36539520611 051083819
3653952061          2          1       0.94       2544  36539520612 051090257
3653952049          2          7       0.25       2544  36539520491 051091125
3653952049          3          1       7.35       2544  36539520491 051091132
3653952049          1          1       0.22       2544  36539520491 051091118

Output desired
Code:
3653952085          1          1       0.42       2544  36539520851 051082559
3653952073          1          1       1.73       2544  36539520731 051083656
3653952061          2          1       0.94       2544  36539520612 051090257
3653952049          1          1       0.22       2544  36539520491 051091118

# 7  
Old 02-25-2016
Do you need the final output to be sorted?

Or do you just want to print lines from your input file that have the largest numeric value in column7 for each distinct value in column1 after discarding all lines in which column3 >1 and/or column4 > 6.26?

For future reference, please note that if you give your overall requirements first (instead of micromanaging what steps might be taken to reach your final goal), you're likely to get much more efficient code to produce the output you want.
This User Gave Thanks to Don Cragun For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Use sort to sort numerical column

How to sort the following output based on lowest to highest BE? The following sort does not work. $ sort -t. -k1,1n -k2,2n bfd.txt BE31.116 0s 0s DOWN DAMP BE31.116 0s 0s DOWN DAMP BE31.117 0s 0s ... (7 Replies)
Discussion started by: sand1234
7 Replies

2. UNIX for Beginners Questions & Answers

Difference of Sort -n -k2 -k3 & Sort -n -k2,3

Hi, Could anyone kindly show me a link or explain the difference between sort -n -k2 -k3 & sort -n -k2,3 Also, if I like to remove the row with repetition at both $2 and $3, Can I safely use sort -u -k2 -k3 Example; 100 20 30 100 20 30 So, both $2 and $3 are same and I... (2 Replies)
Discussion started by: Indra2011
2 Replies

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

4. Shell Programming and Scripting

Help with sort word and general numeric sort at the same time

Input file: 100%ABC2 3.44E-12 USA A2M%H02579 0E0 UK 100%ABC2 5.34E-8 UK 100%ABC2 3.25E-12 USA A2M%H02579 5E-45 UK Output file: 100%ABC2 3.44E-12 USA 100%ABC2 3.25E-12 USA 100%ABC2 5.34E-8 UK A2M%H02579 0E0 UK A2M%H02579 5E-45 UK Code try: sort -k1,1 -g -k2 -r input.txt... (2 Replies)
Discussion started by: perl_beginner
2 Replies

5. Shell Programming and Scripting

Errors in if conditions with to many OR conditions

Hi ALL I have a script where in i need to check for several values in if conditons but when i execute the script it throws error such as "TOO MANY ARGUMENTS" if then msg="BM VAR Issue :: bmaRequestVAR=$bmaRequestVAR , nltBMVAR=$nltBMVAR , bmaResponseVAR=$bmaResponseVAR ,... (10 Replies)
Discussion started by: nikhil jain
10 Replies

6. Shell Programming and Scripting

If conditions need

Dear Expert, Below code is for to take the backup of database by daily time stamp. I need vital help to make my script automatic sending me email if it sucess or fail. echo on @REM Seamonkey's quick date batch (MMDDYYYY format) @REM Setups %date variable @REM First parses month, day, and... (6 Replies)
Discussion started by: Alone
6 Replies

7. Shell Programming and Scripting

Alternate to sort --random-sort

sort --random-sort The full command is path=`find /testdir -maxdepth 1 -mindepth 1 -type d | ***Some sort of sort function*** | head -1` I have a list I want to randomly sort. It works fine in ubuntu but on a 'osx lion' sort dosen't have the --random-sort option. I don't want to... (5 Replies)
Discussion started by: digitalviking
5 Replies

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

9. Shell Programming and Scripting

How to Sort Floating Numbers Using the Sort Command?

Hi to all. I'm trying to sort this with the Unix command sort. user1:12345678:3.5:2.5:8:1:2:3 user2:12345679:4.5:3.5:8:1:3:2 user3:12345687:5.5:2.5:6:1:3:2 user4:12345670:5.5:2.5:5:3:2:1 user5:12345671:2.5:5.5:7:2:3:1 I need to get this: user3:12345687:5.5:2.5:6:1:3:2... (7 Replies)
Discussion started by: daniel.gbaena
7 Replies

10. UNIX for Dummies Questions & Answers

2 or more if conditions

Hello, I have a file as follows: col no:1 2 3 4 5 6 7 8 9 10 11 a 4 226 226 ch:95024048-95027592, 1y224 of 3545 223 224 ident b 53 235 235 ch:148398-148401255, 1y184 of 3187 180 186 ident awk... (3 Replies)
Discussion started by: dr_sabz
3 Replies
Login or Register to Ask a Question