user3209698
user3209698

Reputation: 127

sorting rows of a data file with Linux

I would like to sort the lines of a data file (each line idependent from each other) from the first character. For example, if I have a data file

1   0.1     0.6     0.4
2   0.5     0.2     0.3
3   1.0     0.2     0.8

I would like to end with something like

1   0.6     0.4     0.1
2   0.5     0.3     0.2
3   1.0     0.8     0.2

I have tried to do it using the sort command, but it sorts the columns (not the line). Transposing the data file +sort could be also a good solution (I don't know any easy way for transposing datafiles).

Thanks for the help!

Upvotes: 0

Views: 49

Answers (2)

Quinn
Quinn

Reputation: 4504

Or to read input line by line, use tr and sort like this:

#! /bin/sh
while read -r line; do
    echo $line | tr ' ' '\n' | sort -k1,1nr -k2 | tr '\n' '\t' >> output
    echo >> output
done < input

tr ' ' '\n' is to convert row to column.

Upvotes: 1

choroba
choroba

Reputation: 241998

Perl to the rescue!

perl -lawne '
    print join "\t", $F[0], sort { $b <=> $a } @F[1..$#F]
' < input > output
  • -n reads the input line by line
  • -a splits the line on whitespace into the @F array
  • -l adds newlines to print

See sort, join .

Upvotes: 2

Related Questions