2016-04-20 21 views
0

Ich möchte die Zeilen einer Datendatei (jede Zeile voneinander unabhängig) aus dem ersten Zeichen sortieren. Zum Beispiel, wenn ich eine DatendateiSortieren von Zeilen einer Datendatei mit Linux

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

haben würde Ich mag mit so etwas wie

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

ich es zu tun haben versucht, beenden die Art Befehl, aber es sortiert die Spalten (nicht die Linie). Transponieren der Datendatei + sort könnte auch eine gute Lösung sein (ich kenne keinen einfachen Weg zum Transponieren von Datendateien).

Danke für die Hilfe!

+0

http://stackoverflow.com/questions/25062169/using-bash-to-sort-data-horizontal vielleicht? – FirebladeDan

Antwort

2

Perl zur Rettung!

perl -lawne ' 
    print join "\t", $F[0], sort { $b <=> $a } @F[1..$#F] 
' <input> output 
  • -n liest die Eingangszeilen
  • -a teilt die Linie auf Leerzeichen in die @F Array
  • -l newlines zu print

sort, join Siehe hinzufügt.

+0

So nützlich und leistungsstarker Befehl. Danke für deine Antwort, es hat mein Problem definitiv gelöst! – user3209698

1

oder Eingabe Zeile für Zeile zu lesen, verwenden und trsort wie folgt aus:

#! /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' ist Zeile Spalte zu konvertieren.

Verwandte Themen