2017-01-09 2 views
0

Ich versuche die höchste Zahl innerhalb einer Zeichenfolge aus einer Datei zu finden. Zum Beispiel in der Datei password.txt haben wir:Finde die höchste Nummer in einer Datei

jaime:45:/home/jaime:/bin/bash 
sofia:113:/home/sofia:/bin/bash 
marta:2015:/home/marta:/bin/bash 
pedro:2024:/home/pedro:/bin/bash 

So ist die höchste Zahl sollte 2024 sein, und wir haben es in eine Variable speichern: -

number=2024 

Ich habe mehrere Dinge versucht, mit grepawk, sed oder sogar mit sort, aber ohne irgendeine Lösung.

+0

Es wäre gut, wenn Sie Ihre Bemühungen teilen und uns wissen lassen, wie es gescheitert ist. – Inian

+0

Bitte werfen Sie einen Blick auf: [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Http://stackoverflow.com/help/someone-answers) – Cyrus

Antwort

3

Ich schlage vor:

number=$(cut -d: -f 2 file | sort -n | tail -n 1) 
+1

Schätzen Sie die Antwort, aber mehrere Tools für diese triviale Aufgabe vorschlagen ist ein bisschen eine Übertötung – Inian

+0

Dies ist die beste Antwort von allen. es ist eine falsche Aussage zu sagen, "mehrere Werkzeuge vorschlagen". – HuStmpHrrr

+1

@HuStmpHrrr: Es ist eine vollkommen gültige Antwort, warum drei Prozesse aufrufen, wenn Sie mit einem in 'awk' tun können? Bedeutet das nicht Mehrfachnutzung? Stellen Sie sich einen Fall vor, wenn der Eingang für eine Million Zeilen Datei skaliert wird? Welche wird Ihrer Meinung nach schneller sein? – Inian

0

Versuchen Sie folgendes:

number=$(grep -o '[0-9]*' password.txt | sort -nr | head -1) 
+0

Was passiert, wenn es eine Zeile wie 'sofia9999: 113:/gibt? home/sofia:/bin/bash' in der Datei? – arco444

+0

das ist der Haken, aber das ist nicht in der bereitgestellten Eingabe. –

+1

@FarhadFarahi; Das könnte eine gültige Zeile in der Eingabe – Inian

1

Awk zur Rettung!

awk -F":" 'BEGIN{max=0}{if(($2)>max) max=$2}END {print max}' file 
2024 

Um es in einer Variablen zu speichern,

max="$(awk -F":" 'BEGIN{max=0}{if(($2)>max) max=$2}END {print max}' file)" 
printf "%d\n" "$max" 
2024 
1

@Thotensar: Wenn Ihr input_file gleiche ist wie Abtastwerteingang gezeigt, dann folgenden können Sie in derselben helfen.

awk -F":" '{Q=Q>$2?Q:$2} END{print Q}' Input_file 

Ich hoffe, das hilft Ihnen.

Verwandte Themen