sort on second column only based on first column


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sort on second column only based on first column
# 1  
Old 03-15-2010
sort on second column only based on first column

I have an input file like this...
Code:
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Sunlight
AAAlkalines     Sunlight
AAAlkalines     Sunlight
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAASalines      Energizer
AAASalines      Energizer
AAASalines      Sunlight
Batteries       Energizer
Batteries       Sunlight
Batteries       Energizer
RechargableAAA  Energizer
RechargableAAA  Energizer
RechargableAAA  Duracell
RechargableAAA  Duracell
EmergencyLight  AlFaris
EmergencyLight  AlFaris
EmergencyLight  Geepas
EmergencyLight  Geepas

I want to get the output as below while the first column is intact(without moving the order) but sorting on the second column only according to the names in the first column...
Code:
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Sunlight
AAAlkalines     Sunlight
AAAlkalines     Sunlight
AAASalines      Energizer
AAASalines      Energizer
AAASalines      Sunlight
Batteries       Energizer
Batteries       Energizer
Batteries       Sunlight
RechargableAAA  Duracell
RechargableAAA  Duracell
RechargableAAA  Energizer
RechargableAAA  Energizer
EmergencyLight  AlFaris
EmergencyLight  AlFaris
EmergencyLight  Geepas
EmergencyLight  Geepas

# 2  
Old 03-15-2010
if the sequence of the col1 values are not important,

Code:
for col1 in $(awk '{print $1}' file | sort -u); do grep "^$col1" file | sort -k2; done


o/p:
Code:
AAASalines      Energizer
AAASalines      Energizer
AAASalines      Sunlight
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Energizer
AAAlkalines     Sunlight
AAAlkalines     Sunlight
AAAlkalines     Sunlight
Batteries       Energizer
Batteries       Energizer
Batteries       Sunlight
EmergencyLight  AlFaris
EmergencyLight  AlFaris
EmergencyLight  Geepas
EmergencyLight  Geepas
RechargableAAA  Duracell
RechargableAAA  Duracell
RechargableAAA  Energizer
RechargableAAA  Energizer

# 3  
Old 03-15-2010
Actually, the sequence of the first column is very important to me.
# 4  
Old 03-15-2010
Code:
perl -lane'
  $_{$F[0]}++ or $c++;
  push @x, [$c, @F];
  END {
    print $_->[1], "\t", $_->[2] for 
      sort {
        $a->[0] <=> $b->[0] || 
        $a->[2] cmp $b->[2]
        } @x
    }' infile

# 5  
Old 03-15-2010
Quote:
Originally Posted by radoulov
Code:
perl -lane'
  $_{$F[0]}++ or $c++;
  push @x, [$c, @F];
  END {
    print $_->[1], "\t", $_->[2] for 
      sort {
        $a->[0] <=> $b->[0] || 
        $a->[2] cmp $b->[2]
        } @x
    }' infile

Well, i don't have perl on the system i am working right now but i will give it a try later on another system.

Thanks,
# 6  
Old 03-15-2010
Ok Smilie

Code:
awk '$1 != p { c++ }
{ print c, $0; p = $1 }
' p=1 infile |
  sort -k1.1n -k3.3 |
    cut -d\  -f2-

# 7  
Old 03-15-2010
SmilieSmilie Yes, that's it. It is working perfect.

Thanks,
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Sort based on one column

Hi All , I am having an input file like this Input file 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 ... (9 Replies)
Discussion started by: kshitij
9 Replies

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

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

4. Shell Programming and Scripting

awk to sum a column based on duplicate strings in another column and show split totals

Hi, I have a similar input format- A_1 2 B_0 4 A_1 1 B_2 5 A_4 1 and looking to print in this output format with headers. can you suggest in awk?awk because i am doing some pattern matching from parent file to print column 1 of my input using awk already.Thanks! letter number_of_letters... (5 Replies)
Discussion started by: prashob123
5 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

need to remove duplicates based on key in first column and pattern in last column

Given a file such as this I need to remove the duplicates. 00060011 PAUL BOWSTEIN ad_waq3_921_20100826_010517.txt 00060011 PAUL BOWSTEIN ad_waq3_921_20100827_010528.txt 0624-01 RUT CORPORATION ad_sade3_10_20100827_010528.txt 0624-01 RUT CORPORATION ... (13 Replies)
Discussion started by: script_op2a
13 Replies

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

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