AWK : Jede zweite Zeile ausgeben

Gast #1407051
Lesenswert?

Hallo,

Ich möchte aus einen TextfileIN der Form:

1234
1235
1346
1468

jede zweite Zeile ausgeben. ich habe hierfür versucht mit gawk den 
modolo Befehl zu nutzen.

gawk 'NR%2==1'  TextfileIN.txt

Jedoch wird mir mit diesem Befehl immer nur die Zeile 1 ausgegeben. 
ollte nicht eigentlich jede Zeile ausgegeben werden, deren Zeilennummer 
/ 2 keinen Rest hat?

Danke
#1407058
Lesenswert?

klaus schrieb:

> jede zweite Zeile ausgeben. ich habe hierfür versucht mit gawk den
> modolo Befehl zu nutzen.
>
> gawk 'NR%2==1'  TextfileIN.txt
>
> Jedoch wird mir mit diesem Befehl immer nur die Zeile 1 ausgegeben.

Bei mir gibt das Kommando wie erwartet alle ungeraden Zeilen aus:

~ $ gawk 'NR%2==1' TextfileIN.txt
1234
1346

> ollte nicht eigentlich jede Zeile ausgegeben werden, deren Zeilennummer
> / 2 keinen Rest hat?

Nein, die Zeilen, deren Nummer / 2 einen Rest von 1 hat, also die 
ungeraden. Wenn Du die geraden willst, mußt Du 'NR%2==0' verwenden.
Gast #1407061
Lesenswert?

>Nein, die Zeilen, deren Nummer / 2 einen Rest von 1 hat, also die
>ungeraden. Wenn Du die geraden willst, mußt Du 'NR%2==0' verwenden.

Ja da habe ich mich verschrieben. Ist klar.

Jedoch wird bei mir nur immer ein Wert ausgegeben...Woran kann das 
liegen?
#1407071
Lesenswert?

klaus schrieb:
> Jedoch wird bei mir nur immer ein Wert ausgegeben...Woran kann das
> liegen?

Entweder Dein awk hat nen Hau oder die Textdatei (z.B andere Zeilenenden 
als der awk erwartet). Welche gawk-Version verwendest Du denn (gawk 
--version) und auf welchem Betriebssystem?

Um mal zu testen, ob Dein awk die Zeilen überhaupt richtig erkennt und 
zählt, kannst Du mal das ausprobieren:

~ $ gawk '{print NR ":" $0}' TextfileIN.txt
1:1234
2:1235
3:1346
4:1468
#1407126
Lesenswert?

Hast Du es mal mit "sauberem" Input probiert, um zu sehen, ob es am awk 
oder an der Textdatei liegt?

~ $ echo -ne '1\n2\n3\n4\n' | awk 'NR%2==1'
1
3

Wenn hier auch nur '1' herauskommt, liegt es wohl am awk, ansonsten an 
Deinem Input. In dem Fall würde ich von der Datei mal einen Hexdump 
machen und schauen, wie die Zeilenenden aussehen (\n, \r\n, \r oder ganz 
anders).
#1407128
Lesenswert?

klaus schrieb:
> Wie könnte man es noch ohne Modulo machen?

z.B. so:

~ $ echo -ne '1\n2\n3\n4\n' | awk '{if (x==0) {x=1; print} else {x=0}}'
1
3

... oder mit sed:

~ $ echo -ne '1\n2\n3\n4\n5\n6\n' | sed -n 'p;n'
1
3
5

... und für die geraden Zeilen:

~ $ echo -ne '1\n2\n3\n4\n5\n6\n' | sed -n 'n;p'
2
4
6

> Vielleicht kann ich das umgehen?

Ich würde eher die Ursache des Problems suchen als es zu umgehen, denn 
dieselbe Ursache könnte auch noch andere, weniger offensichtliche Fehler 
zur Folge haben.
Gast #1407139
Lesenswert?

>Ich würde eher die Ursache des Problems suchen als es zu umgehen, denn
>ieselbe Ursache könnte auch noch andere, weniger offensichtliche Fehler
>zur Folge haben.

Hab gerade keine Idee woran es liegen könnte....
#1407146
Lesenswert?

klaus schrieb:

> Hab gerade keine Idee woran es liegen könnte....

Hast Du den Test denn gemacht, den ich in meinem vorletzten Beitrag 
gepostet hatte? Falls ja, weißt Du jetzt zumindest, ob es an der Datei 
oder am awk liegt und das ist schonmal mehr als "keine Idee". ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren