Help with sort only column 2 data separately


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Help with sort only column 2 data separately
# 1  
Old 02-18-2016
Help with sort only column 2 data separately

Input File
Code:
Contig_1_294435nt       242231  242751
Contig_1_294435nt       242390  242782
Contig_1_294435nt       242390  242782
Contig_1_294435nt       291578  291668
Contig_2_242278nt       75910   76271
Contig_2_242278nt       76036   76316
Contig_2_242278nt       76036   76316
Contig_3_206988nt       100775  100835
Contig_3_206988nt       100775  100835
Contig_3_206988nt       156143  157111
Contig_3_206988nt       156147  157111
Contig_3_206988nt       178412  178537
Contig_3_206988nt       178729  178896
Contig_3_206988nt       179269  179510
Contig_3_206988nt       179269  179517
Contig_3_206988nt       179269  180441
Contig_3_206988nt       180033  180441
Contig_3_206988nt       180043  180441
Contig_3_206988nt       39664   39742
Contig_3_206988nt       39666   39743
Contig_3_206988nt       41610   41684
Contig_3_206988nt       41617   41684
.
.

Output File
Code:
Contig_1_294435nt       242231  242751
Contig_1_294435nt       242390  242782
Contig_1_294435nt       242390  242782
Contig_1_294435nt       291578  291668
Contig_2_242278nt       75910   76271
Contig_2_242278nt       76036   76316
Contig_2_242278nt       76036   76316
Contig_3_206988nt       39664   39742
Contig_3_206988nt       39666   39743
Contig_3_206988nt       41610   41684
Contig_3_206988nt       41617   41684
Contig_3_206988nt       100775  100835
Contig_3_206988nt       100775  100835
Contig_3_206988nt       156143  157111
Contig_3_206988nt       156147  157111
Contig_3_206988nt       178412  178537
Contig_3_206988nt       178729  178896
Contig_3_206988nt       179269  179510
Contig_3_206988nt       179269  179517
Contig_3_206988nt       179269  180441
Contig_3_206988nt       180033  180441
Contig_3_206988nt       180043  180441
.
.

I would like to sort column 2 data separately and fix the column 1.
I did try below command, but it no work:
Code:
sort -k2n Input_File
Contig_3_206988nt       39664   39742
Contig_3_206988nt       39666   39743
Contig_3_206988nt       41610   41684
Contig_3_206988nt       41617   41684
Contig_2_242278nt       75910   76271
Contig_2_242278nt       76036   76316
Contig_2_242278nt       76036   76316
Contig_3_206988nt       100775  100835
Contig_3_206988nt       100775  100835
Contig_3_206988nt       156143  157111
Contig_3_206988nt       156147  157111
Contig_3_206988nt       178412  178537
Contig_3_206988nt       178729  178896
Contig_3_206988nt       179269  179510
Contig_3_206988nt       179269  179517
Contig_3_206988nt       179269  180441
Contig_3_206988nt       180033  180441
Contig_3_206988nt       180043  180441
Contig_1_294435nt       242231  242751
Contig_1_294435nt       242390  242782
Contig_1_294435nt       242390  242782
Contig_1_294435nt       291578  291668
.
.

Above command will sort the column 2 from smallest to largest but at the same time it will change the column 1 data as well Smilie
Which is not what I desired output.

Thanks for any advice.

---------- Post updated at 03:27 AM ---------- Previous update was at 03:14 AM ----------

I think the below command works Smilie
Code:
sort -k1,1 -k2n Input_File
Contig_1_294435nt       242231  242751
Contig_1_294435nt       242390  242782
Contig_1_294435nt       242390  242782
Contig_1_294435nt       291578  291668
Contig_2_242278nt       75910   76271
Contig_2_242278nt       76036   76316
Contig_2_242278nt       76036   76316
Contig_3_206988nt       39664   39742
Contig_3_206988nt       39666   39743
Contig_3_206988nt       41610   41684
Contig_3_206988nt       41617   41684
Contig_3_206988nt       100775  100835
Contig_3_206988nt       100775  100835
Contig_3_206988nt       156143  157111
Contig_3_206988nt       156147  157111
Contig_3_206988nt       178412  178537
Contig_3_206988nt       178729  178896
Contig_3_206988nt       179269  179510
Contig_3_206988nt       179269  179517
Contig_3_206988nt       179269  180441
Contig_3_206988nt       180033  180441
Contig_3_206988nt       180043  180441
.
.

# 2  
Old 02-18-2016
How about
Code:
sort -k1,1 -k2,2n file

This User Gave Thanks to RudiC For This Post:
# 3  
Old 02-18-2016
If you really want to keep column 1 as it is and sort the 2nd and 3rd columns by increasing numeric value of the 2nd column (instead of sorting column 2 values with column 1 values, you could try:
Code:
#!/bin/ksh
tmpfn=${0##*/}.$$

trap 'rm -rf "$tmpfn"' EXIT

awk -v tmpfn="$tmpfn" '
BEGIN {	OFS = "\t"
	cmd = "sort -k1n > " tmpfn
}
{	f1[++lc] = $1
	print $2, $3 | cmd
}
END {	close(cmd)
	for(i = 1; i <= lc; i++) {
		getline < tmpfn
		print f1[i], $1, $2
	}
	close(tmpfn)
}' Input_File

which, with your sample input (without the .... lines) produces the output:
Code:
Contig_1_294435nt	39664	39742
Contig_1_294435nt	39666	39743
Contig_1_294435nt	41610	41684
Contig_1_294435nt	41617	41684
Contig_2_242278nt	75910	76271
Contig_2_242278nt	76036	76316
Contig_2_242278nt	76036	76316
Contig_3_206988nt	100775	100835
Contig_3_206988nt	100775	100835
Contig_3_206988nt	156143	157111
Contig_3_206988nt	156147	157111
Contig_3_206988nt	178412	178537
Contig_3_206988nt	178729	178896
Contig_3_206988nt	179269	179510
Contig_3_206988nt	179269	179517
Contig_3_206988nt	179269	180441
Contig_3_206988nt	180033	180441
Contig_3_206988nt	180043	180441
Contig_3_206988nt	242231	242751
Contig_3_206988nt	242390	242782
Contig_3_206988nt	242390	242782
Contig_3_206988nt	291578	291668

Of course, a lot of error checking should be added in the END clause, but this seems to work as a proof of concept.

As always, if you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk or nawk.

This was written and tested using a 1993+ version of the Korn shell, but will work with any POSIX-conforming shell.

Last edited by Don Cragun; 02-18-2016 at 05:06 AM.. Reason: Remove the debugging sleep.
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

How do I sort data in column properly?

Can i use 'column' command to get the required 3rd column output? Input example: 1 2 345678 90 2 2 356 42 3 3 8265 55 Output required: 1 2 345678 90 2 2 356 42 3 3 8265 55 Basically i want the 3rd column to be justified to the right, instead of left.... (3 Replies)
Discussion started by: nurul_nadzirah
3 Replies

3. Shell Programming and Scripting

Sort data by date and then search by column

Hi, I have a file where data is pipe separated.First i want to sort the file content by date . Then i want to pick up the records based on the first column which should be unique and not have duplicates. NYSE|yyyrrrddd|toronto|isin|ticker|2013-05-15... (2 Replies)
Discussion started by: samrat dutta
2 Replies

4. Shell Programming and Scripting

Compare 2 files and match column data and align data from 3 column

Hello experts, Please help me in achieving this in an easier way possible. I have 2 csv files with following data: File1 08/23/2012 12:35:47,JOB_5330 08/23/2012 12:35:47,JOB_5330 08/23/2012 12:36:09,JOB_5340 08/23/2012 12:36:14,JOB_5340 08/23/2012 12:36:22,JOB_5350 08/23/2012... (5 Replies)
Discussion started by: asnandhakumar
5 Replies

5. Shell Programming and Scripting

Advanced: Sort, count data in column, append file name

Hi. I am not sure the title gives an optimal description of what I want to do. Also, I tried to post this in the "UNIX for Dummies Questions & Answers", but it seems no-one was able to help out. I have several text files that contain data in many columns. All the files are organized the same... (14 Replies)
Discussion started by: JamesT
14 Replies

6. Shell Programming and Scripting

Sort data As per first Column

hI I have file A NSU30504 5 6 G 6 NSU3050B T 7 9 J NSU30506 T I 8 9 NSU3050C H J K L Output: NSU3050B T 7 9 J NSU3050C H J K L NSU30504 5 6 G 6 NSU30506 T I 8 9Video tutorial on how to use code tags in The UNIX and Linux Forums. (13 Replies)
Discussion started by: pareshkp
13 Replies

7. Shell Programming and Scripting

Sort data from column to row

Hi, I need somebody's help with sorting data with awk. I've got a file: 10 aaa 4584 12 bbb 6138 20 ccc 4417 21 ddd 7796 10 eee 7484 12 fff ... (5 Replies)
Discussion started by: killerbee
5 Replies

8. Shell Programming and Scripting

Sort a the file & refine data column & row format

cat file1.txt field1 "user1": field2:"data-cde" field3:"data-pqr" field4:"data-mno" field1 "user1": field2:"data-dcb" field3:"data-mxz" field4:"data-zul" field1 "user2": field2:"data-cqz" field3:"data-xoq" field4:"data-pos" Now i need to have the date like below. i have just... (7 Replies)
Discussion started by: ckaramsetty
7 Replies

9. Shell Programming and Scripting

Extract data based on match against one column data from a long list data

My input file: data_5 Ali 422 2.00E-45 102/253 140/253 24 data_3 Abu 202 60.00E-45 12/23 140/23 28 data_1 Ahmad 256 7.00E-45 120/235 140/235 22 data_4 Aman 365 8.00E-45 15/65 140/65 20 data_10 Jones 869 9.00E-45 65/253 140/253 18... (12 Replies)
Discussion started by: patrick87
12 Replies

10. Shell Programming and Scripting

Question about sort specific column and print other column at the same time !

Hi, This is my input file: ali 5 usa abc abu 4 uk bca alan 6 brazil bac pinky 10 utah sdc My desired output: pinky 10 utah sdc alan 6 brazil bac ali 5 usa abc abu 4 uk bca Based on the column two, I want to do the descending order and print out other related column at the... (3 Replies)
Discussion started by: patrick87
3 Replies
Login or Register to Ask a Question