2016-10-19 8 views
2

Ich habe eine Datei, die wie folgt sortiert:Wie listet ich bestimmte Zeilen mit awk auf?

2 Good 
2 Hello 
3 Goodbye 
3 Begin 
3 Yes 
3 No 

ich für den höchsten Wert in der Datei suchen möchten und zeigen, was man ist die Grenze?

3 Goodbye 
3 begin 
3 Yes 
3 No 

Wie würde ich das tun?

+1

wie viele Linien erwarten Sie? (100K ist nicht dasselbe wie 1K ..) Ist es ein Muss, es in einem einzigen Befehl zu tun? oder möglich, es in ein Skript zu verpacken? – nabeel

Antwort

0

cat file.txt | sortieren -r | awk '{if ($ 1> = zurück) {print $ 0; prev = $ 1}}‘

3 Yes 
3 No 
3 Goodbye 
3 Begin 

Unter der Annahme, datei.txt enthält

2 Good 
2 Hello 
3 Goodbye 
3 Begin 
3 Yes 
3 No 
+0

Vielen Dank, das war genau das, was ich brauchte! – edgevnv

+0

Wenn Sie keine stabile Sortierung haben, kann dies die Reihenfolge der Elemente ändern ... – karakfa

0

Zuerst erhalten Sie den höchsten Wert in der Datei in eine Variable. Wenn die Datei bereits sortiert ist, berappen Sie die letzte Zeile in der Datei. Dann parse die Nummer mit awk aus.

highest=`tail -1 file.list|awk '{print $1}'` 

Dann grep die Datei mit diesem Wert.

grep "^${highest} " file.list 
0

Dies sollte die Arbeit tun. Ich verwende nur awk wie in der Frage erforderlich:

awk 'BEGIN {v=0} {l = l "\n" $0} {if ($1>v) {l = $0; v = $1}} END {print l}' file.txt 

Die Variable v initialisiert (bevor die Datei Parsen) auf 0 Dann wird jede Zeile gelesen wird und im Speicher gehalten; Wenn das erste Feld ($1) größer als v ist, aktualisieren Sie v und leeren Sie, was in l ist. Am Ende drucken Sie einfach den Inhalt von l.

+0

, aber dies wird nur die erste Zeile "3 Goodbye" – nabeel

+0

@nabeel Right drucken. Aktualisiert. –

+0

'v = 0' ist nicht explizit erforderlich, es ist die Standardeinstellung. – karakfa

0

Es ist einfacher als Sie denken.

awk '/^3/' file 

3 Goodbye 
3 Begin 
3 Yes 
3 No 
2

awk zur Rettung!

$ awk 'FNR==NR{if(max<$1) max=$1; next} $1==max' file{,} 

3 Goodbye 
3 Begin 
3 Yes 
3 No 

Doppel-Pass, finden Sie das Maximum und filtern Sie den Rest aus.

Verwandte Themen