Finde den Integer-Wert nach einem String aus einer Datei

Finde den Integer-Wert nach einem String aus einer Datei

Ich möchte den Integer-Wert nach einem bestimmten String aus einer Datei abrufen und alle Integer sortieren. Beispiel: Ich habe eine Datei mit Tausenden von Zeilen mit String-Gewicht,

-weight 100
-weight 200
-weight 20

Ich möchte alle Ganzzahlwerte in sortierter Reihenfolge erhalten.

Antwort1

Wenn Sie nach der längsten Zahlenfolge suchen, die am Ende der Zeile steht, können Sie einfach Folgendes verwenden grep:

$ grep -oP '\d+\s*$' file 
100
200
20

Das -ogibt an grep, nur den übereinstimmenden Teil der Zeile zu drucken, und das -Paktiviert Perl-kompatible reguläre Ausdrücke. PCREs können wir \d+für „eine oder mehrere Ziffern“ und \s*für „0 oder mehr Leerzeichen“ verwenden. Insgesamt druckt dieser Befehl also die längste Zahlenfolge, die am Ende der Zeile gefunden wird.

Wenn Sie sie sortiert haben möchten, gehen Sie einfach durch sort:

$ grep -oP '\d+\s*$' file | sort -n
20
100
200

Wenn Sie Ihr Muster stattdessen mit einer bestimmten Zeichenfolge verankern müssen, verwenden Sie:

$ grep -oP -- '-weight\s+\K\d+' file | sort -n
20
100
200

Das \Kgibt an grep, dass bis zu diesem Punkt keine Übereinstimmungen eingeschlossen werden sollen. Daher druckt der obige Befehl nur die längste Zahlenfolge nach -weightund 0 oder mehr Leerzeichen.

Beachten Sie: Wenn Sie auch negative Zahlen oder Dezimalzahlen einschließen möchten, benötigen Sie Folgendes:

grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n

Zum Beispiel:

$ cat file 
-weight 100
-weight 200
-weight 20
-weight -29
-weight -32.4

$ grep -oP -- '-weight\s+\K[0-9,-]+' file | sort -n
-32
-29
20
100
200

Antwort2

Versuche dies:

cut -d ' ' -f2 inputfile|sort -n

-d ' '- Trennzeichen auf Leerzeichen setzen
-f2- zweite Spalte abrufen
sort -n- Ergebnis als Zahlen sortieren
Testergebnis:

20
100
200

Antwort3

Versuchen Sie diesen Sed-Befehl:

sed -E 's/^.*weight\s([[:digit:]]*).*/\1/' sort.txt  | sort -n

Oder

sed -E 's/.*weight\s([0-9]*).*/\1/' sort.txt | sort -n

Testfall:

-weight 100 
-weight 200 
-weight 20

Ergebnisse:

20
100 
200

Hinweis: Sie haben keinen guten Testfall angegeben, also habe ich meinen übernommen.

Die Info:

  • ^.*weight\s([[:digit:]]): Lesen Sie jede Zeile und erfassen Sie die Zahlen nach dem Wort „Gewicht“ mit dem darauf folgenden „Leerzeichen“.
  • | sort -n: Leiten Sie die Ausgabe an den Sortierbefehl weiter und sortieren Sie nach numerischem Wert.

verwandte Informationen