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
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.
>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?
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
Das awk erkennt die Zeilen richtig. Es wird wie gewollt dargestellt. Jedoch scheint das %2 einfach ignoriert zu werden. Gawk version ist die 3.1.6
Wie könnte man es noch ohne Modulo machen? Vielleicht kann ich das umgehen?
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).
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.
>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....
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". ;)
Ja es liegt nicht an der Datei. Aus der kann gawk die Zeilennummern feststellen. Danke euch für die Hilfe
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.