awk - Wie drucke ich die Anzahl der Zeichen für die ersten n Zeilen in einer Datei?


10

Ich habe einen Befehl:

$ awk '{ print length($0); }' /etc/passwd

Es gibt die Anzahl der Zeichen jeder Zeile in einer passwd- Datei aus:

52
52
61
48
81
58
etc.

Wie kann ich die Anzahl der Zeichen nur für die ersten n Zeilen drucken?

Zum Beispiel - für die ersten 3 Zeilen würde es etwas geben wie:

52
52
61

@ilkkachu wahr.
NJZK2

Wenn Sie Leerzeichen wie ignorieren möchten, verwenden Sie unten - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Antworten:


17

Sagen Sie awkzu beenden, wenn genügend Zeilen gelesen wurden:

awk '$0 = length; NR==3 { exit }' /etc/passwd

Beachten Sie, dass diese Lösung leere Zeilen ignoriert, jedoch nicht für die Zeilenanzahl.


knifflig und cool! (+1)

2
Wenn eine oder die Zeilen leer sind, wird die Zuweisung mit Null (ein falscher Wert) ausgewertet, und die Länge wird nicht gedruckt.
Ilkkachu

@ilkkachu: Je nach Situation wäre es sinnvoll, leere Zeilen zu ignorieren. Ich habe einen Hinweis dazu hinzugefügt.
Thor

14

Eine direkte Awk-Version (nicht so effizient wie @ Thors), aber etwas klarer:

awk 'NR <= 3 {print length}' /etc/passwd

3
Wenn das so wäre awk '{ print length } NR>=3 { exit }' /etc/passwd, würde ich es positiv bewerten.
Bis auf weiteres angehalten.

3
@ TennisWilliamson, danke. Das ist ein sehr guter Vorschlag, ich werde ihn nicht in meine Antwort aufnehmen, da er bereits in Thors Vorschlag enthalten ist.

5

Sie können es awknur mit einem Befehl ausführen , wie von @Thor und @JJoao (+1 von mir) beschrieben.

Sie können awkund headmit -nfolgenden Parametern die Anzahl der Zeilen wie unten beschrieben kombinieren :

Vielen Dank für den Vorschlag von @Maerlyn, in dieser Reihenfolge auszuführen: head | awk

zB Sie erhalten die ersten 3 Zeilen mit:

head -n3 /etc/passwd | awk '{ print length($0); }' 

Hauptmann

-n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file 

@ msjavx86 - großartig :) Bitte akzeptieren Sie die Antwort, wenn Sie dazu in der Lage sind
Yaron

natürlich werde ich - in ca. 10 minuten;) nochmal danke!
bambosze_babuni

8
Vielleicht sogar umgekehrt, head -n3 /etc/passwd | awkdamit awk nicht die gesamte Datei verarbeiten muss.
Maerlyn

1
AWK kann Zeilen zählen, ohne dass dies erforderlich ist head.
Bis auf weiteres angehalten.

@ TennisWilliamson - danke für den Kommentar, mit headwar die erste funktionierende Lösung, die mir in den Sinn kam. Ich habe @Thor, @JJoao Antwort, die awknur Lösung verwendet, positiv bewertet .
Yaron
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.