Sort based on one column


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers Sort based on one column
# 1  
Sort based on one column

Hi All ,

I am having an input file like this

Input file

Code:
7 sks/jsjssj/ddjd/hjdjd/hdhd/Q 10 0.5 13 
    dkdkd/djdjd/djdjd/djd/QB 01 0.5 
    ldld/dkd/jdf/fjfjf/fjf/Q 0.5 
10 sjs/jsdd/djdkd/dhd/Q 01 0.5 21 
     kdkd/djdd/djdd/jdd/djd/QB 01 0.5 
     dkdld/djdjd/djd/Q 01 0.5 
     djd/jdkd/djd/djd/Qb 01 0.5 
19 dd/jdddjd/djd/djd/d/Q 10 0.5 100
    djd/jhd/jhd/jd/jd/Qb 10 0.5 
     djd/djd/djd/djd/djd/dj 01 0.5

I need to sort the file based on last column and this should be my output file

Output file

Code:
19 dd/jdddjd/djd/djd/d/Q 10 0.5 100
    djd/jhd/jhd/jd/jd/Qb 10 0.5 
     djd/djd/djd/djd/djd/dj 01 0.5 
  10 sjs/jsdd/djdkd/dhd/Q 01 0.5 21 
     kdkd/djdd/djdd/jdd/djd/QB 01 0.5 
     dkdld/djdjd/djd/Q 01 0.5 
     djd/jdkd/djd/djd/Qb 01 0.5
   7 sks/jsjssj/ddjd/hjdjd/hdhd/Q 10 0.5 13 
    dkdkd/djdjd/djdjd/djd/QB 01 0.5 
    ldld/dkd/jdf/fjfjf/fjf/Q 0.5

From Largest to smallest 5th COlumn

When I tried to use this command
sort -u -k5 input , it is disturbing other columns as well
All the columns should be sorted based on the 5th column but its not happening .

Last edited by RavinderSingh13; 12-07-2019 at 10:26 AM..
# 2  
Hi, try:

Code:
awk '/^[0-9]/{print x}1' file | 
awk '{$1=$1}1' RS= FS='\n' OFS=§ |
sort -rnk 5,5 |
tr § '\n'

  1. Split the records with a blank line, using a digit on the first position as the indicator of a new record
  2. Replace the line terminators of records with an obscure character (paragraph character was used here (§), but it could be any character as long as it is not used in the input file) and remove the empty line that was introduced in step 1
  3. Numeric reverse sort of the records on the 5th field
  4. Reassemble the records to their original state by replacing the obscure character by a newline

Last edited by Scrutinizer; 12-07-2019 at 10:07 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 3  
Hi Scrutinizer ,

Thanks for the code , but could you tell me what is the operator which is being used ,for is it $ for OFS ?
Could you help me out in brief explanation ?

Thanks
Kshitij
# 4  
Hi ksitij, I was in the process of adding an explanation, it has been added to my post...
# 5  
Hello kshitij,

Could you please try following. Written and tested with GNU awk and GNU sort.

Code:
awk '
/^[0-9]+/{
  val=$NF
}
{
  print val "@" $0
}'  Input_file  | 
sort -t'@' -nrsk1,1  | 
awk '
{
  sub(/.*@/,"")
}
1'

Output will be as follows.
Code:
19 dd/jdddjd/djd/djd/d/Q 10 0.5 100
    djd/jhd/jhd/jd/jd/Qb 10 0.5
     djd/djd/djd/djd/djd/dj 01 0.5
10 sjs/jsdd/djdkd/dhd/Q 01 0.5 21
     kdkd/djdd/djdd/jdd/djd/QB 01 0.5
     dkdld/djdjd/djd/Q 01 0.5
     djd/jdkd/djd/djd/Qb 01 0.5
7 sks/jsjssj/ddjd/hjdjd/hdhd/Q 10 0.5 13
    dkdkd/djdjd/djdjd/djd/QB 01 0.5
    ldld/dkd/jdf/fjfjf/fjf/Q 0.5

Thanks,
R. Singh

Last edited by RavinderSingh13; 12-07-2019 at 10:39 AM..
This User Gave Thanks to RavinderSingh13 For This Post:
# 6  
@Ravinder nice different approach, in case the sort utility understands stable sort.
# 7  
Quote:
Originally Posted by Scrutinizer
@Ravinder nice different approach, in case the sort utility understands stable sort.
Thank you S. So you mean sort command's stable utility is not supported by all O.S systems. Sorry I only run it on a online terminal which has a GNU sort, not sure about any other O.S systems,if any details you want me to add then feel free to let me know I will add it in my answer then, cheers.

Thanks,
R. Singh
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #376
Difficulty: Medium
HP-UX was UNIX V7 compliant.
True or False?

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 to align/sort the column pairs of an csv file, based on keyword word specified in another file?

I have a csv file as shown below, xop_thy 80 avr_njk 50 str_nyu 60 avr_irt 70 str_nhj 60 avr_ngt 50 str_tgt 80 xop_nmg 50 xop_nth 40 cyv_gty 40 cop_thl 40 vir_tyk 80 vir_plo 20 vir_thk 40 ijk_yuc 70 cop_thy 70 ijk_yuc 80 irt_hgt 80 I need to align/sort the csv file based... (7 Replies)
Discussion started by: dineshkumarsrk
7 Replies

3. Shell Programming and Scripting

Sum column values based in common identifier in 1st column.

Hi, I have a table to be imported for R as matrix or data.frame but I first need to edit it because I've got several lines with the same identifier (1st column), so I want to sum the each column (2nd -nth) of each identifier (1st column) The input is for example, after sorted: K00001 1 1 4 3... (8 Replies)
Discussion started by: sargotrons
8 Replies

4. Shell Programming and Scripting

Sort based on certain value in a column

Hi, i need to sort content of files based on a specific value. An example as below. Input1.txt Col_1 SW_MH2_ST ST_F72_9S SW_MH3_S6 Col_2 SW_MH3_AS7 ST_S15_9CH SW_MH3_AS8 SW_MH3_ST Col_3 ST_M93_SZ ST_C16_TC (12 Replies)
Discussion started by: redse171
12 Replies

5. Shell Programming and Scripting

Sort based on column 1, not working with awk

Hi Guru, I need some help regarding awking the output so it only show the first line (based on column) of each row. So If column has 1, three row, then it only show the first line of that row, based on similar character in column 1. So i am trying to achieve a sort, based on column one and... (3 Replies)
Discussion started by: Junes
3 Replies

6. UNIX for Dummies Questions & Answers

Sort command in one column and not effect to another column

If my data is numerical : 1 = 101 2 = 102 3 = 104 4 = 104 7 = 103 8 = 103 9 = 105 I need the result like below: 1 = 101 2 = 102 3 = 103 4 = 103 7 = 104 8 = 104 9 = 105 (4 Replies)
Discussion started by: GeodusT
4 Replies

7. UNIX for Dummies Questions & Answers

How to sort a column based on numerical ascending order if it includes e-10?

I have a column of numbers in the following format: 1.722e-05 2.018e-05 2.548e-05 2.747e-05 7.897e-05 4.016e-05 4.613e-05 4.613e-05 5.151e-05 5.151e-05 5.151e-05 6.1e-05 6.254e-05 7.04e-05 7.12e-05 7.12e-05 (6 Replies)
Discussion started by: evelibertine
6 Replies

8. Shell Programming and Scripting

Sort file based on column

Hi, My input file is $cat samp 1 siva 1 raja 2 siva 1 siva 2 raja 4 venkat i want sort this name wise...alos need to remove duplicate lines. i am using cat samp|awk '{print $2,$1}'|sort -u it showing raja 1 (3 Replies)
Discussion started by: rsivasan
3 Replies

9. Shell Programming and Scripting

sort on second column only based on first column

I have an input file like this... AAAlkalines Energizer AAAlkalines Energizer AAAlkalines Energizer AAAlkalines Sunlight AAAlkalines Sunlight AAAlkalines Sunlight AAAlkalines Energizer AAAlkalines Energizer AAAlkalines Energizer AAASalines ... (7 Replies)
Discussion started by: malcomex999
7 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

Featured Tech Videos