Hier werden Nullwerte an die Spitze gesetzt. Ist es möglich, die Nullwerte an das Ende der Liste zu bekommen?
2 Antworten auf die Frage
2
Socowi
Ich gehe davon aus, dass Ihre Nullwerte nur leere Zeilen sind.
Wenn Ihre einzige Anforderung ist, dass die leeren Zeilen am Ende sind, kehren Sie einfach die Reihenfolge um. Dies ändert natürlich auch die Reihenfolge der Zahlen. Hier sind einige Varianten nebeneinander:
Wenn die Reihenfolge der Zahlen sein muss sort -gund nur die leeren Zeilen bis zum Ende verschoben werden sollen, können Sie einfach alle leeren Zeilen entfernen und am Ende einfügen.
grep . file | sort -g | cat - <(grep -v . file)
1
Kamil Maciorowski
Erstellen Sie eine zusätzliche Spalte und sortieren Sie sie zuerst, und entfernen Sie sie am Ende:
<input.data sed 's/^/1 /; s/^1 $/2 /' | sort -k 1n -k 2g | sed 's/^. //'
Der Vorteil ist, dass der Befehl seine Eingabe nur einmal liest, sodass Sie ihn in einer Pipe verwenden können.
Erläuterung:
Der erste sedfügt 1 vor jeder Zeile ein (beachten Sie das nachgestellte Leerzeichen). Ist 1 jetzt die gesamte Zeile (dh die ursprüngliche Zeile war leer), wird diese durch ersetzt 2 . Dadurch wird eine zusätzliche Spalte erstellt, die angibt, ob die ursprüngliche Zeile leer war oder nicht.
sort wird angewiesen, nach der ersten (extra) Spalte zu sortieren, erst dann nach der zweiten.
Das Finale sedentfernt das, was zuerst hinzugefügt wurde.
Hinweis:
sortVerwendet in der Regel ein Gebietsschema ( Details ). Ich habe absichtlich Ziffern 1und 2numerische Sortierungen gewählt, damit der ganze Trick in einem (?) Vernünftigen westlichen Gebietsschema funktioniert.