mikrocontroller.net

Forum: PC-Programmierung AWK : Jede zweite Zeile ausgeben


Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NF { i++ }
 i&1 { print }

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie könnte man es noch ohne Modulo machen? Vielleicht kann ich das 
umgehen?

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: R. Max (rmax)
Datum:

Bewertung
0 lesenswert
nicht 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". ;)

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Modulo siehe oben mit der UND Verknüpfung.

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja es liegt nicht an der Datei. Aus der kann gawk die Zeilennummern 
feststellen. Danke euch für die Hilfe

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.