2017-06-06 3 views
1

Wie sortiere ich diese Ausgabe?Unix - So sortieren Sie einen bestimmten Schlüssel

10.1.3.39:{ "range_start" : 96, "range_end" : 96 } 
10.1.3.27:{ "range_start" : 33, "range_end" : 33 } 
10.1.3.100:{ range_start" : 30, "range_end" : 30 } 
10.1.2.233:{ "range_start" : 78, "range_end" : 78 } 
10.1.4.239:{ "range_start" : 53, "range_end" : 53 } 
10.1.2.161:{ "range_start" : 44, "range_end" : 44 } 

Ich mag von den range_start Schlüssel

So diese Ausgabe sortieren, wäre zu erwarten:

10.1.3.100:{ "range_start" : 30, "range_end" : 30 } 
10.1.3.27:{ "range_start" : 33, "range_end" : 33 } 
10.1.2.161:{ "range_start" : 44, "range_end" : 44 } 
10.1.4.239:{ "range_start" : 53, "range_end" : 53 } 
10.1.2.233:{ "range_start" : 78, "range_end" : 78 } 
10.1.3.39:{ "range_start" : 96, "range_end" : 96 } 
+1

Die dritte Eingabezeile fehlt ein Zitat vor 'range_start'. –

+0

Ja, ich habe das in der Frage behoben. Vielen Dank. – noober

Antwort

2

Sie können wie so ein decorate, sort, undecorate Rohr tun:

$ awk -F",|:" '{printf "%s\t%s\n", $3,$0}' file | sort -n | cut -f 2 

Entweder Fall:

$ awk -F",|:" '{printf "%s\t%s\n", $3,$0}' file | sort -n | awk -F"\t" '{print $2}' 

Oder, wenn ein \t oder andere Trennzeichen verwenden, können Sie cut verwenden

10.1.3.100:{ range_start" : 30, "range_end" : 30 } 
10.1.3.27:{ "range_start" : 33, "range_end" : 33 } 
10.1.2.161:{ "range_start" : 44, "range_end" : 44 } 
10.1.4.239:{ "range_start" : 53, "range_end" : 53 } 
10.1.2.233:{ "range_start" : 78, "range_end" : 78 } 
10.1.3.39:{ "range_start" : 96, "range_end" : 96 } 

Ändern Sie die \t in ein anderes Trennzeichen, wenn Registerkarten in den Textdaten vorhanden sind.

1

Hier haben wir ein JSON-ähnliches Format haben, keine Spalte-formatierten Text, doch wir können nur durch Leerzeichen getrennt durch einen Feldwert durch die Sortierung erhalten:

sort -n -k 4,4 

Würde Produk e die gewünschte Ausgabe.

Die Verwendung eines Parsers, der das Format kennt, würde jedoch in vielen Fällen helfen. Zum Beispiel würde die Lösung mit sort fehlschlagen, wenn die Schlüssel und Werte nicht konsistent durch Leerzeichen getrennt wären, z.

0.1.3.100:{ range_start":30, "range_end" : 30 } 

oder wenn die Reihenfolge der Einträge nicht konsistent war, z.

0.1.2.233:{ "range_end" : 108, "range_start" : 78 } 
10.1.3.39:{ "range_start" : 96, "range_end" : 96 } 
Verwandte Themen