sort by multiple columns and reformat...

hello..

I have big file and so far I was able to shink it and make smaller with certains values that I need..

vendor1|2000|1
vendor2|1000|1
vendor2|5000|1
vendor2|500|2
vendor3|1000|2
vendor3|500|3
vendor4|500|3
Vendor5|500|1
vendor6|500|3
Vendor7|1000|1
Vendor8|1000|774
Vendor8|1500|5
Vendor8|2000|86
Vendor8|3000|1
Vendor8|3500|1
Vendor8|4000|3
Vendor8|5000|13
Vendor8|500|3333

I need sort by multiple columns first one(string) and then after thet second one (numeric)

I did it like this:

sort -t "|" -k 1

but if I do sort -t "|" -k 1 -k 2n does not do anything...

output after this should be:

vendor1|2000|1
vendor2|500|2
vendor2|1000|1
vendor2|5000|1
vendor3|500|3
vendor3|1000|2
vendor4|500|3
Vendor5|500|1
vendor6|500|3
Vendor7|1000|1
Vendor8|500|3333
Vendor8|1000|774
Vendor8|1500|5
Vendor8|2000|86
Vendor8|3000|1
Vendor8|3500|1
Vendor8|4000|3
Vendor8|5000|13

Second:

after that reformat output to be in one line:

vendor1|2000|1|vendor2|500|2|vendor2|1000|1|vendor2|5000|1|vendor3|500|3|vendor3|1000|2|vendor4|500|3|Vendor5|500|1|vendor6|500|3|....

thanks and I appreciate any help

try :

sort -t"|" -k1.7n  -k2n file

kindly note that i/p you put have capital letter "V" and small letter "v"..you
have to make all the letters to small or capital ones then sort as below then
make them in one line.

sed  's/V/v/g' infile.txt | sort -t "|" -k 1,1 -k 2,2n | nawk '1' ORS="|"
you will not need sed command if you use anchal_khare code then pipe it to nawk as above. where ORS="|"

:D:D:D

thank U guys for help...that was quick :slight_smile: