Help with sort First Column followed by Second Column

Input file:

DN63688_c0_g1   DN63688_c0_g1_i1
DN71_c0_g1      DN71_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i2
DN63688_c0_g1   DN63688_c0_g1_i3
DN63688_c0_g1   DN63688_c0_g1_i7
DN134_c0_g1     DN134_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i8
DN63688_c0_g1   DN63688_c0_g1_i9
DN63688_c0_g1   DN63688_c0_g1_i10
DN63688_c0_g1   DN63688_c0_g1_i11
DN63688_c0_g1   DN63688_c0_g1_i12
DN133_c0_g1     DN133_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i13
DN63688_c0_g1   DN63688_c0_g1_i14
DN63688_c0_g1   DN63688_c0_g1_i15
DN63688_c0_g1   DN63688_c0_g1_i20
DN63688_c0_g1   DN63688_c0_g1_i21
.
.

Desired Output:

DN71_c0_g1      DN71_c0_g1_i1
DN133_c0_g1     DN133_c0_g1_i1
DN134_c0_g1     DN134_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i2
DN63688_c0_g1   DN63688_c0_g1_i3
DN63688_c0_g1   DN63688_c0_g1_i7
DN63688_c0_g1   DN63688_c0_g1_i8
DN63688_c0_g1   DN63688_c0_g1_i9
DN63688_c0_g1   DN63688_c0_g1_i10
DN63688_c0_g1   DN63688_c0_g1_i11
DN63688_c0_g1   DN63688_c0_g1_i12
DN63688_c0_g1   DN63688_c0_g1_i13
DN63688_c0_g1   DN63688_c0_g1_i14
DN63688_c0_g1   DN63688_c0_g1_i15
DN63688_c0_g1   DN63688_c0_g1_i20
DN63688_c0_g1   DN63688_c0_g1_i21
.
.

Command try:

sort -T . -k1.3n -t_ -k6 Input_File
DN71_c0_g1      DN71_c0_g1_i1
DN133_c0_g1     DN133_c0_g1_i1
DN134_c0_g1     DN134_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i10
DN63688_c0_g1   DN63688_c0_g1_i11
DN63688_c0_g1   DN63688_c0_g1_i12
DN63688_c0_g1   DN63688_c0_g1_i13
DN63688_c0_g1   DN63688_c0_g1_i14
DN63688_c0_g1   DN63688_c0_g1_i15
DN63688_c0_g1   DN63688_c0_g1_i2
DN63688_c0_g1   DN63688_c0_g1_i20
DN63688_c0_g1   DN63688_c0_g1_i21
DN63688_c0_g1   DN63688_c0_g1_i3
DN63688_c0_g1   DN63688_c0_g1_i7
DN63688_c0_g1   DN63688_c0_g1_i8
DN63688_c0_g1   DN63688_c0_g1_i9
.
.

I wanna sort the number after DNX at first column from smallest to largest then followed by sort the number _iX after at second column from smallest to largest too.

Thanks for any advice.

try:

 sort -T . -k3n -t_ -k7 infile > outfile

I get:

$ sort -T . -k3n -t_ -k7 filename
DN133_c0_g1     DN133_c0_g1_i1
DN134_c0_g1     DN134_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i1
DN63688_c0_g1   DN63688_c0_g1_i10
DN63688_c0_g1   DN63688_c0_g1_i11
DN63688_c0_g1   DN63688_c0_g1_i12
DN63688_c0_g1   DN63688_c0_g1_i13
DN63688_c0_g1   DN63688_c0_g1_i14
DN63688_c0_g1   DN63688_c0_g1_i15
DN63688_c0_g1   DN63688_c0_g1_i2
DN63688_c0_g1   DN63688_c0_g1_i20
DN63688_c0_g1   DN63688_c0_g1_i21
DN63688_c0_g1   DN63688_c0_g1_i3
DN63688_c0_g1   DN63688_c0_g1_i7
DN63688_c0_g1   DN63688_c0_g1_i8
DN63688_c0_g1   DN63688_c0_g1_i9
DN71_c0_g1      DN71_c0_g1_i1

FWIW -T. may not help performance if the disk is busy. By default sort uses TMPDIR, so using one of the kernel "filesystems" is usually a better choice.

1 Like

Try:

sort -T . -k1.3n -t_ -k6.2n Input_File
1 Like

Thanks to solve my doubt :slight_smile:

---------- Post updated at 10:20 PM ---------- Previous update was at 10:20 PM ----------

Thanks a lot :slight_smile: