Vorher (INPUT.txt):
Foo#1 Foo#2 Foo#3 Foo#4 Foo#4 Foo#5 SUM
Bar#1 0 0 0 0 3 0 3
Bar#2 2 0 1 0 0 0 3
Bar#3 0 0 0 2 2 0 4
Bar#4 0 0 1 1 2 0 4
Bar#5 1 0 1 0 0 0 2
Bar#6 3 20 0 0 1 0 24
Bar#7 1 0 2 0 0 0 3
SUM 7 20 5 3 8 0 43
Nach (OUTPUT.txt):
Foo#2 Foo#4 Foo#1 Foo#3 Foo#4 Foo#5 SUM
Bar#6 20 1 3 0 0 0 24
Bar#3 0 2 0 0 2 0 4
Bar#4 0 2 0 1 1 0 4
Bar#1 0 3 0 0 0 0 3
Bar#2 0 0 2 1 0 0 3
Bar#7 0 0 1 2 0 0 3
Bar#5 0 0 1 1 0 0 2
SUM 20 8 7 5 3 0 43
Schwierige Frage: Wie sortiere ich vertikal und horizontal nach der SUM-Spalte und -Zeile in Bash oder Perl?
Screenshots:
Vor:
Nach:
Das Problem ist zweifach: Zuerst möchten Sie die
#bar
Zeilen nach dem numerischen Wert der SpalteH
sortieren. Dies ist in den meisten zeilenorientierten Befehlszeilenwerkzeugen eine ziemlich triviale Sortieroperation.sort -nr -k8,1 input.txt |column -t > intermediate1.txt
Der Header Ihrer Tabelle und die Summenzeile erfordern ein manuelles Mischen, danach jedoch ein Zwischenergebnis von:
Die zweite ist etwas komplexer. Mischen Sie die Spalten basierend auf den Spaltensummenwerten in der unteren Zeile.
Das Problem wird viel einfacher zu lösen, wenn Sie Ihre Matrix zum ersten Mal transponieren , dh die Spalten in Zeilen umschalten und umgekehrt, da Ihre Operation dann wieder eine einfache Spaltensortierung ist. Verwenden dieses GNU awk-Codes aus dem Stapelüberlauf:
erhält das nächste Zwischenergebnis:
Diese Matrix kann nun nach dem Wert der Summenspalte sortiert werden
sort -k9,1 -nr intermediate2.txt > intermediate3.txt
, die nach manueller Korrektur der Reihenfolge der Kopf- und Summenzeilen wie folgt aussieht:Transponieren Sie dann mit demselben awk-Code wie zuvor das Zwischenergebnis oben zurück, um zu Ihrem ursprünglichen Layout von Spalten und Zeilen zurückzukehren:
und das schön formatierte Ergebnis:
Die Reihenfolge von Takt Nr. 4 und Takt Nr. 3 ist gegenüber dem Beispielergebnis umgekehrt, da der Summenwert identisch ist. Die absteigende Sortierreihenfolge wird jedoch auch in Spalte A befolgt, ebenso wie für Takt Nr. 7, Takt Nr. 2 und Takt Nr. 1
quelle
Für die Aufzeichnung eine
python
Lösung.quelle